Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QSqlDatabase和SQLite:选择“查询未按预期运行”_Sqlite_Qt - Fatal编程技术网

QSqlDatabase和SQLite:选择“查询未按预期运行”

QSqlDatabase和SQLite:选择“查询未按预期运行”,sqlite,qt,Sqlite,Qt,我在Qt中使用SQLite时遇到问题。我创建了一个表并执行了一个简单的SELECT查询 为什么即使query.exec返回true,这些查询仍然无效?为什么这里的大小不返回0?您还没有在表中插入任何数据。isValid的文档说明: 如果查询当前位于有效记录上,则返回true; 否则返回false 无论是创建表还是从空表中选择,都不会返回任何记录,因此在这两种情况下isValid都应返回false 尝试向表中插入一些数据 请注意,并非所有数据库后端都支持大小。使用db.driver->hasFea

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


为什么即使query.exec返回true,这些查询仍然无效?为什么这里的大小不返回0?

您还没有在表中插入任何数据。isValid的文档说明:

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

无论是创建表还是从空表中选择,都不会返回任何记录,因此在这两种情况下isValid都应返回false

尝试向表中插入一些数据


请注意,并非所有数据库后端都支持大小。使用db.driver->hasFeatureQSqlDriver::QuerySize检查您的数据库是否支持它。如果不支持,那么大小将返回-1。

这解释了我的第一个问题。但是,为什么在运行SELECT查询时得到-1作为行数?即使我执行success=query.execinsert到person id、firstname、lastname值0、“foo”、“foo”时,此行为仍然存在;在执行SELECT语句之前。文档还说,如果数据库不支持报告有关查询大小的信息,则大小返回-1,但我不确定如何验证这种情况。
#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;
}