需求

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;
    }

参考