【问题标题】:Can't query sqlite db in Qt, but able to query MySQL.无法在 Qt 中查询 sqlite db,但可以查询 MySQL。
【发布时间】:2014-07-04 06:55:46
【问题描述】:

我有一个使用 MySQL 作为数据库的工作 Qt 应用程序,但我决定将数据库更改为 Sqlite 以便在 android 上部署。我在 Sqlite 中创建了具有相同数据和表结构的相同数据库。 我已成功更改与 Sqlite 的连接。

通过测试应用程序(在桌面中),我发现一些查询在 Sqlite 和 MySQL 上都可以正常工作,但在其他一些地方,查询不会在 Sqlite 中返回任何数据,而在 MySQL 中工作正常。

这不是查询问题,因为我将查询更改为简单的SELECT * FROM TABLE_NAME,但我仍然遇到同样的问题。

这里是一个简单的代码sn-p

QSqlQuery qry;
qry.prepare("SELECT * FROM users;");
if( !qry.exec() ){
    qDebug()<< qry.lastError().text().toLatin1();
    qDebug()<< "data" ;
}
else if (qry.size() < 1) {
    qDebug()<< "There is no users" << qry.size();
}
else {
    qDebug()<< "It Works !!" << qry.size();
}

在使用 Sqlite 时,我总是得到 没有用户 -1 但在 MySQL 中,它返回表中正确的行数。

任何建议可能是什么问题!是不是跟速度有关?

【问题讨论】:

    标签: mysql qt sqlite


    【解决方案1】:

    来自 Qt 在QSqlQuery 上的文档:

    返回结果的大小(返回的行数),如果无法确定大小或数据库不支持有关查询大小的报告信息,则返回 -1。

    SQLite 实际上是不提供此信息的。您可以通过以下方式确认:

    qDebug() << qry.driver().hasFeature(QSqlDriver::QuerySize);
    

    如果是 SQLite,您需要遍历结果中的所有行并自己计算结果。

    如果您只需要计算users 表中的行数,那么最好这样做:

    qry.prepare("SELECT count(*) FROM users;");
    

    这将始终告诉您作为单个单元格结果的行数。不需要数据库的特殊功能。这将适用于任何地方(除非某些数据库不支持count(*) 功能,然后请在 cmets 中纠正我)。

    【讨论】:

    • 这是一个完整的工作良好的演示解决方案,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2012-07-07
    • 1970-01-01
    相关资源
    最近更新 更多