问题描述
我的数据库应用程序在使用 QsqlDatabase
/MariaDB 时遇到了奇怪的行为。
应用程序工作正常,但是当很长时间(比如几个小时)没有发送任何查询时,第一次查询总是返回一个空结果集,没有任何 MysqL 错误。之后,查询再次开始工作......
我这样初始化我的连接:
QsqlDatabase sqldb = QsqlDatabase::addDatabase("QMysqL",connectionName);
sqldb.setHostName(host);
sqldb.setUserName(user);
sqldb.setPassword(password);
sqldb.setDatabaseName(db);
sqldb.setConnectOptions("MysqL_OPT_RECONNECT=1");
sqldb.open();
bool db::checkopen() {
if (!sqldb.isopen()) {
sqldb = QsqlDatabase::database(_conName);
if (!sqldb.isopen()) {
std::cerr << "Cannot open the database: " << sqldb.databaseName().toUtf8().data() << std::endl;
std::cerr << "Db error: " <<sqldb.connectionName().toStdString() << " " << sqldb.lastError().text().toStdString() << std::endl;
std::cerr << "Class db: (checkOpen) cannot open the database";
return false;
}
}
return true;
}
我如何使用上述示例:
QString db::fetchSingle(QString sqlQuery) {
QTextStream(stdout) << "db::fetchsingle query: " << sqlQuery << "\n";
if (!checkopen()){
QTextStream(stdout) << "db::fetchSingle checkOpen returned false \n";
return "None";
}
QsqlQuery res = QsqlQuery(sqlQuery,sqldb);
if (!res.next()){
QTextStream(stdout) << "Returning none because !res.next() \n";
QTextStream(stdout) << "Last query text: " << res.lastQuery() << "\n";
QTextStream(stdout) << "Last error: " << sqldb.lastError().text() << "\n";
return "None";
}
else
return res.value(0).toString();
}
因此,对于一段时间后的第一次查询,db::fetchSingle
方法的输出将输出以下内容:
db::fetchsingle query: SELECT MAX(shiftid) FROM tb_shift
Returning none because !res.next()
Last query text: SELECT MAX(shiftid) FROM tb_shift
Last error:
查询本身应该总是产生一个结果,因为它只是一个表中肯定有行的列的最大值。在第一次查询之后,应用程序再次开始正常工作。知道为什么会发生这种情况吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)