0

我在 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?

4

1 回答 1

2

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

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

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

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

Note that size() is not supported by all database backends. Use db.driver()->hasFeature(QSqlDriver::QuerySize) to check if it is supported for your database. If it isn't supported, then size() will return -1.

于 2012-05-22T12:48:18.123 回答