Select from SQLite with Qt

23,266

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.

Share:
23,266
vas3k
Author by

vas3k

Updated on July 09, 2022

Comments

  • vas3k
    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?