需求
qt 使用 mysql 的时候,提示: QSqlDatabasePrivate::database: requested database does not belong to the calling thread.
解决
使用 QSqlQuery
的时候,指明数据库连接。
int DataBaseProcess::ConnectDataBase(QSqlDatabase& db, const QString& name)
{
// if (db_.open()) {
// return 1;
// }
qDebug() << "ConnectDataBase: " << name;
if (QSqlDatabase::contains(name))//判断testConnect连接是否存在并连接
{
db = QSqlDatabase::database(name);
}
else //未连接则新建数据库连接
{
// QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db = QSqlDatabase::addDatabase("QMYSQL", name);
db.setHostName("localhost"); // 设置数据库服务器地址
db.setPort(3306);
db.setDatabaseName("ke_db"); // 设置数据库名
db.setUserName("root"); // 设置数据库用户名
db.setPassword("654321"); // 设置数据库密码
}
if (!db.open()) {
qDebug() << "无法连接到数据库:" << db.lastError().text();
return -1;
}
return 0;
}
QString name = "main";
QSqlDatabase db;
qDebug() << "LoadAnalysis: connect db";
ConnectDataBase(db, name);
QSqlQuery query(db);
query.prepare("SELECT * FROM file_data "
"WHERE analysis_id = :analysis_id AND device_sn = :device_sn AND key_id > 0;");
// query.bindValue(":strip_id", strip_id);
query.bindValue(":analysis_id", analysis_id);
query.bindValue(":device_sn", device_sn);
if (!query.exec()) {
qDebug() << "LoadAnalysis: select: " << query.lastError().text();
DisconnectDataBase(db, name);
return -1;
}