2016-12-13 11 views
0

同じQSQLQuery変数を使用して複数のステートメントを実行することができますQt 5.3.2を使用SQLite?実行するたびにfinishまたはclear関数を呼び出す必要がありますか?例えば同じQSQLQuery変数を使用して複数の文を実行できますか?

QSqlQuery query; 

query.prepare("INSERT INTO myTable (id, name) VALUES (:id, :name)"); 
query.bindValue(":id", id); 
query.bindValue(":name", name); 

if(!query.exec()) 
{ 
    qDebug() << "Error"; 
} 

query.finish() // or query.clear()? 

query.prepare("INSERT INTO myProducts (product, price) VALUES (:product, :price)"); 
query.bindValue(":product", product); 
query.bindValue(":price", price); 

if(!query.exec()) 
{ 
    qDebug() << "Error"; 
} 

query.finish() // or query.clear()? 

:私はfinish機能を使用する必要があると思うが、私はclear機能はありません正確に理解しませんでした。ドキュメントには次のように書かれています。

結果セットをクリアし、クエリが保持するリソースをすべて解放します。 クエリの状態を非アクティブに設定します。

+1

実行するとどうなりますか?メモリをオフにして、finish()またはclear()を実行することなく、同じQSqlQueryを使用しました。私の推測はlastError()やisValid()のようなものは、そうしないと間違っている可能性があります。 –

答えて

2

あなたのケースでは、これらの機能のいずれかを使用する必要はありません、あなたは私が同じQSQLQueryを使用することはできますが、約


を求めている2つのラインのいずれかなしにうまく行うことができますSQLiteを使ってQt 5.3.2で複数の文を実行する変数?

もちろん、そうすることはできますが、そのようにする必要はありません。たとえば、SQLクエリを実行したがっていて、完了した有効なQSqlQueryオブジェクトが既に存在する場合(それ以上データを取得したくない場合)、その同じQSqlQueryオブジェクトを使用することができます別のQSqlQueryを作成する必要がないため、新しいクエリを使用してください。

実行ごとに終了またはクリア機能を呼び出す必要がありますか?ここで

ドキュメントを約QSqlQuery::finish()を言うことである:

それが再実行されるまで、それ以上のデータがこのクエリからフェッチされませんデータベースドライバに指示します。 通常、この関数はを呼び出す必要はありませんが、の後でにクエリーを再利用する場合は、ロックやカーソルなどのリソースを解放するために役立ちます。

これは、使用するために、あなたが完了したオブジェクトQSqlQueryを長期間保存したい場合にのみ使用する必要があることを意味します。しかし、本当にそうする必要はありません。あなたが終わったときにあなたのオブジェクトをスコープの外に出させてください。

QSqlQuery::clear()

は、結果セットを解放クエリによって保持されたすべてのリソースをクリアします。クエリの状態を非アクティブに設定します。 この関数を呼び出す必要はほとんどありません。

あなたは同じQSqlQueryオブジェクトを複数回使用されているか確認するために、Master Detail Exampleで特にcreateConnection() functionで見ることができます。

関連する問題