2016-03-25 5 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時間、1日おきに。あなたはそれを決める。 – B026

+0

MySQLサーバーのシャットダウン後に 'bool QSqlDatabase :: isOpen()'がtrueを返すと思いますか? – KcFnMi