お茶漬けぶろぐ

QtでSQLを触った時の後片付け

[cpp]
QSqlDatabase db = QSqlDatabase::addDatabase(“QMYSQL”);
db.setDatabaseName(“hoge”);
〜略〜
db.open();
〜処理〜
QString connName;
connName = db.connectionName();
db.close();
db.removeDatabase(connName);
[/cpp]

みたいな感じで接続しててきとうに処理してcloseとremoveDatabaseすると、

connection 'qt_sql_default_connection' is still in use, all queries will cease to work

とか言われて死ぬ。(別に死なない)

どうやら、db.close()してもdbはデータベースへの参照情報を保持したままでいるらしい。dbをリセットしてやるとエラーも出ずにうまくいく。

結局、こんな感じにするといいみたい。(お片付け部分だけ)

[cpp]
QString connName;
connName = db.connectionName();
db.close();
db = QSqlDatabase();
db.removeDatabase(connName);
[/cpp]

db = QSqlDatabaseがミソ。リセットだー。

参考はこちら→warning remove database - Stack Overflow

おしまい。

< 最近更新されたファイルを検索する

Qtで定期的にスロットを呼び出す >