Select from SQLite with Qt
Solution 1
The isValid() method returns true if the query is positionned on a valid record, but after calling exec(), it isn't : you have to move to a valid record first, for example with query.first() or query.next(). See Qt docs : http://doc.qt.io/archives/4.6/qsqlquery.html
The size() returning -1 doesn't mean there is no result : SQLite is one of the databases for which the size of the query is not directly available (look in the documentation for QSqlDriver::hasFeature()). You can check that rows are returned and find the size with a loop and query.next().
Depending on what you want to do with the result of your select, you could also use QSqlQueryModel instead of QSqlQuery.
Solution 2
In your "QSqlQuery query;" declaration, you have to specify the database connection, e.g. "QSqlQuery query(db)"
Solution 3
Given that your program reports that the query is invalid, have a look at the error message as follows:
QDebug() << query.lastError().text();
This should help you in debugging the problem.
vas3k
Updated on July 09, 2022Comments
-
vas3k almost 2 years
I try to deal with SQLite database on Qt 4.5.3 on Linux. I've already created the databsae.
Then, I try to perform select on Qt:
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();
But debug console says:
("lessons", "weeklessons", "weeks") -1 true false
Why it's select nothing? What I have doing wrong?