0

QtでSQLiteデータベースを作成しようとしましたが、作成しました。私は自分のdbを「prova_db」と呼びました。これには次の表が含まれています。

marker_db

id     site (columns)
0      www.google.it
1      www.youtube.it
2      www.facebook.it

次に、prova_dbにクエリを実行しようとしました。コードは次のとおりです。

int main () {
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("prova_db");
    if (!db.open()) { printf("DB doesn't exist\n");}
    else  {
        QSqlQuery query1;
            query1.exec( "SELECT site FROM marker_db WHERE id = 1");

        int i = query1.numRowsAffected();
        printf("result row: %d\n", i);
        while(query1.next()){
            QString str = query1.value(0).toString();
            printf("result: %s\n", str);
        }
    }
    db.close();
return 0;
}

結果は次のとおりです。

result row : 0
result : (strange char)

代わりに、結果は次のようになります。

result row: 1
result : www.youtube.it

どこが間違っているの?

ありがとうございました!

4

1 に答える 1

1

あなたは間違った期待を持っていると思います:の結果は、クエリによって変更さnumRowsAffected()れた行の数を示しています。クエリは何も変更しないため、結果は未定義である必要があります。したがって、最初の出力がであると期待するべきではありません。代わりにこのメソッドを使用して、クエリに一致した行の数を確認してください。0risultato riga: 1size()SELECT

QString2番目の問題は、オブジェクトをに渡すことです。これは、代わりprintf()にnullで終了する値の配列へのポインターを期待します(フォーマット指定子charを使用する場合)。オブジェクトをC文字配列へのポインタに%s変換する必要があります。QString

于 2013-01-13T23:23:21.807 に答える