1.最近将Qt5.5.1的项目升级到了5.12.2,写数据库出现问题。报下面的错误。
QSqlDatabasePrivate::database: requested database does not belong to the calling thread.
QSqlQuery::exec: database not open
QSqlError("", "Driver not loaded", "Driver not loaded")
原因是在子线程调用主线程创建的数据库连接,查资料后发现是不允许这么用的。
2.想的解决方案是在子线程重新创建一个连接。但本着节省资源的原则,删除主线程的连接(只用来初始化数据库)
在创建连接的最后面,调用移除数据库连接的方法,
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE","default");
db.setDatabaseName("database.db");
// 打开数据库
if (!db.open()) {
qDebug() << database.lastError();
qFatal("failed to connect.");
}
QSqlDatabase::removeDatabase("default");
出现下面的错误: