3

Qt アプリケーションの異なるスレッドで SQL データベースへの複数の接続を作成して使用するにはどうすればよいですか?

私は言うドキュメントを読みました

接続は、それを作成したスレッド内からのみ使用できます。

異なるスレッドで接続を分離するにはどうすればよいですか?

4

3 に答える 3

6

スレッドごとにデータベース接続を作成する必要があります。QSqlDatabase::addDatabase()のインスタンスを作成するために、各スレッドでパラメータとして異なる接続名とともに使用しますQSqlDatabase。静的addDatabase関数はスレッド セーフであり、異なるスレッドで呼び出すことができます。

于 2015-04-21T09:24:18.340 に答える
2

Qtを使用してプログラムの異なるスレッドでsql dbへの複数の接続を作成して使用するにはどうすればよいですか?

// general worker init slot
DbWorker::init()
{
    this->db = QSqlDatabase::addDatabase("QSQLITE", dbName);
    db.setDatabaseName(dbPath);
    db.open();
}

メインクラスまたは次のようなものがある場合:

DbWorker w1 = new DbWorker;
w1.setDbName("mem_db");
w1.setDbPath(":memory:");
QThread* t1 = new QThread(this);
w1->moveToThread(t1);
connect(t1, SIGNAL(started()), w1, SLOT(init()));
t1->start();

DbWorker w2 = new DbWorker;
w1.setDbName("file_db");
w1.setDbPath("~/usr/foo.db");
QThread* t2 = new QThread(this);
w1->moveToThread(t1);
connect(t2, SIGNAL(started()), w2, SLOT(init()));
t1->start();

したがって、スレッド1にメモリ接続があり、スレッド2にファイル接続があります。管理する唯一のことは、GUIアプリケーションの場合、データをGUIスレッドにフェッチすることです

于 2015-04-21T08:35:07.820 に答える
-2

VoidRealms @ youtube のこのチュートリアルに従ってください。彼は、SQL接続、モデル、およびQtに関する他の多くのことについて非常に良い説明をしています。

ご覧になった後もさらにサポートが必要な場合は、テスト用のサンプル コードをお送りします。

于 2015-04-21T16:07:11.317 に答える