2016-03-25 294 views
1

我正在开发一个使用MySQL数据库的应用程序。用户可能会让应用程序运行好几天,但大部分时间应用程序未使用数据库。无论如何,连接应该保持活跃。我想知道什么是合适的方法来验证连接实际上是否还活着?QSqlDatabase断开连接检测

我应该每5秒钟做一次简单的查询来验证它吗?

A related question.

+1

也许不是每个* 5 *秒,但听起来像一个明智的做法。 (结合检查实际开放状态)。如果DB连接被切断(而QSqlDatabase不是QObject),则不会从QSqlDriver中获取信号。 – peppe

+0

知道为什么没有这样的信号会很有趣。 – KcFnMi

+1

那么,数据库的本地(C)API是否会通知您丢失的连接?也许只是没有人打扰... – peppe

回答

2

不是真的,你应该使用方法bool QSqlDatabase::isOpen检查数据库连接是开放的。如果连接处于打开状态,则返回true,否则返回false。

+0

多久?我期待着一个信号通知。 – KcFnMi

+1

当你调用'bool QSqlDatabase :: open'时,连接建立,当你调用'void QSQlDatabase :: close'时将关闭。所以,这不是必要的。但是,如果你愿意,你应该分析你的系统,并决定必须多久。也许,在每一步,每10分钟,1小时,一天。你决定。 – B026

+0

你相信'bool QSqlDatabase :: isOpen()'在MySQL服务器关闭后返回true吗? – KcFnMi