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