我在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?
答案 0 :(得分:2)
您尚未在表格中插入任何数据。 isValid()
的文档说:
如果查询当前位于有效记录上,则返回true; 否则返回false。
既不创建表也不从空表中选择都会返回任何记录,因此isValid()
在两种情况下都应返回false
。
尝试在表格中插入一些数据。
请注意,所有数据库后端都不支持size()
。使用db.driver()->hasFeature(QSqlDriver::QuerySize)
检查数据库是否支持它。如果不支持,则size()
将返回-1。