QSqlDatabase和SQLite:SELECT查询的行为不符合预期

时间:2012-05-22 11:13:49

标签: sqlite qt

我在Qt中使用SQLite时遇到了麻烦。我创建了一个表并执行了一个简单的SELECT查询。

#include <QtSql>

int main(int argc, char* argv[]) {
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setHostName("localhost");
    db.setDatabaseName(":memory:");
    if (!db.open())
        return -1;

    QSqlQuery query(db);
    bool success = query.exec("create table person (id int primary key, "
            "firstname varchar(20), lastname varchar(20))");    // Returns true
    bool valid = query.isValid();                   // Returns false, expected true
    success = query.exec("select * from person");   // Returns true
    valid = query.isValid();                        // Returns false, expected true
    bool select = query.isSelect();                 // Returns true
    int size = query.size();                        // Returns -1, should be 0

    return 0;
}

即使query.exec返回true,为什么这些查询无效?为什么size在这里没有返回0?

1 个答案:

答案 0 :(得分:2)

您尚未在表格中插入任何数据。 isValid()的文档说:

  

如果查询当前位于有效记录上,则返回true;   否则返回false。

既不创建表也不从空表中选择都会返回任何记录,因此isValid()在两种情况下都应返回false

尝试在表格中插入一些数据。

请注意,所有数据库后端都不支持size()。使用db.driver()->hasFeature(QSqlDriver::QuerySize)检查数据库是否支持它。如果不支持,则size()将返回-1。