我想在我的主机上查询,并使用以下代码进行连接:
QSqlDatabase db_;
db_ = QSqlDatabase::addDatabase("QMYSQL","connName");
db_.setHostName("***.**.***.***");
db_.setDatabaseName("myDB");
db_.setUserName("myUserName");
db_.setPassword("myPassword");
db_.setConnectOptions("MYSQL_OPT_RECONNECT=true");
if (!db_.open())
{
lastExtraInfo = ERROR_DB;
return false;
}
并且连接正常。之后我想对它执行这个简单的查询:
QSqlQuery query(db_);
query.prepare("select count(*) from myTBL");
if(!query.exec())
qDebug()<<query.lastError();
并且上面的执行没有任何错误,但需要很长时间。
当我在终端中使用以下命令并连接到服务器时,我的查询非常快,所以问题不在于服务器端。
hduser@hduser-System:~$ mysql -u myUserName -h ***.**.***.*** -p
...
mysql> select count(*) from myTBL;
当我使用localhost而不是主机并执行上述查询时,结果会非常快速地返回。所以问题不在于程序。
我对这个问题的原因感到困惑。
更新 的解决方案
当我改变时出人意料:
QSqlQuery query(db_);
query.prepare("select count(*) from myTBL");
if(!query.exec())
qDebug()<<query.lastError();
到
QSqlQuery query(db_);
if(!query.exec("select count(*) from myTBL"))
qDebug()<<query.lastError();
问题解决了。但我不知道为什么QSqlQuery::prepare()
导致了这个问题。