5

ここに私の問題があります。このような場合、同じ接続名の重複接続について文句を言います。

Test::Test(QString connectionName)
{
    db=QSqlDatabase::addDatabase("QMYSQL",connectionName);
}

int main(int argc, char *argv[])
{
    QString connectionName=QString("test");
    QCoreApplication a(argc, argv);

    Test myDb(connectionName);
    Test myDb2(connectionName);

    return a.exec();
}

ここに私の解決策:

Test::Test(QString connectionName)
    {
        if(!QSqlDatabase::contains(connectionName))
            db=QSqlDatabase::addDatabase("QMYSQL",connectionName);
        else
            db=QSqlDatabase::database(connectionName);
    }

    int main(int argc, char *argv[])
    {
        QString connectionName=QString("test");
        QCoreApplication a(argc, argv);
        {
            Test myDb(connectionName);
            Test myDb2(connectionName);
        }
        QSqlDatabase::removeDatabase(connectionName);

        return a.exec();
    }

1-)これはこの問題を処理するための良い方法ですか?

2-)別の提案がありますか?

3-)これはQtの欠点だと思いますか?

4

2 に答える 2

1
  1. -
  2. コードの一部にデータベース接続を追加したいと思いstaticます。Testクラスが初期化されるたびに実行されるわけではありません。setupそのすべての作業を処理する関数を持つことができます。
  3. いいえ、ちがいます。これは仕様によるものです。通常、クラスインスタンスを作成するたびに、新しいDB接続を作成/開く必要はありません。
于 2010-09-27T11:50:17.717 に答える
0

接続に異なる名前を付けるだけです。

int main(int argc, char *argv[])
{
    QString connectionName("test");
    QString connectionName2("test2");
    QCoreApplication a(argc, argv);

    Test myDb(connectionName);
    Test myDb2(connectionName2);

    return a.exec();
}
于 2010-09-27T23:44:02.497 に答える