我尝试在Linux上的Qt 4.5.3上处理SQLite数据库.我已经创建了数据库.
然后,我尝试在Qt上执行select:
db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(filename); // Here is FULL path to the database. I've checked it twice :) bool ok = db.open(); qDebug() << db.tables(); QSqlQuery query; query.exec("select * from lessons"); qDebug() << query.size(); qDebug() << query.isSelect(); qDebug() << query.isValid();
但调试控制台说:
("lessons", "weeklessons", "weeks") -1 true false
为什么选择什么?我做错了什么?
如果查询位于有效记录上,则isValid()方法返回true,但在调用exec()之后,它不是:您必须首先移动到有效记录,例如使用query.first()或query.下一个().请参阅Qt docs:http://doc.qt.io/archives/4.6/qsqlquery.html
size()返回-1并不意味着没有结果:SQLite是查询大小不能直接获得的数据库之一(请参阅QSqlDriver :: hasFeature()的文档).您可以检查返回的行,并使用循环和query.next()查找大小.
根据您对select的结果要做什么,您也可以使用QSqlQueryModel而不是QSqlQuery.