0

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 を返さないのはなぜですか?

4

1 に答える 1

2

テーブルにデータを挿入していません。のドキュメントにisValid()は次のように書かれています:

クエリが現在有効なレコードに配置されている場合は true を返します。それ以外の場合は false を返します。

テーブルを作成することも、空のテーブルから選択することも、レコードを返さないため、両方の場合isValid()に返されることが期待されます。false

テーブルにデータを挿入してみてください。

size()すべてのデータベース バックエンドでサポートされているわけではないことに注意してください。db.driver()->hasFeature(QSqlDriver::QuerySize)データベースでサポートされているかどうかを確認するために使用します。サポートされていない場合は、size()-1 が返されます。

于 2012-05-22T12:48:18.123 に答える