2016-04-29 7 views
2

私はsqliteデータベースを使用するqtでアプリケーションを作成しています。データベース接続を開くためのクラスを作成しました。クラスのコンストラクタは以下のとおりである:Qt CiteでのQsqlite重複接続の警告

currencydb::currencydb() 
{ 

    currency = QSqlDatabase::addDatabase("QSQLITE"); 
    currency.setDatabaseName("currency.sqlite"); 
    if(!currency.isOpen()) 
    { 

     if (!currency.open()) 
     { 
      qDebug() << "Error: connection with database fail"; 
     } 
     else 
     { 
      qDebug() << "Database currency: connection ok"; 
     } 
    } 
} 

私はこのコンストラクタを使用しているので、私は、データベースクラスのオブジェクトを作成するとき、私は警告以下の取得:

QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed. 

かどうかをチェックする方法はありますデータベースはすでに開いていますか?

答えて

2

この警告は、データベースがすでに開かれていることを意味するものではなく、に既定の名前のデータベースが既にあることを意味します。接続は(あなたの場合はSQLite v3の)データベースドライバを介してデータベースへのアクセスを提供します。 static publicメソッドQSqlDatabase::addDatabase()を呼び出すときに接続名引数を渡さないと、データベースへの既定の接続を作成します。

QSqlDatabase::contains()を使用して、既定の接続が既にあるかどうかを確認できます。

CurrencyDb::CurrencyDb() 
{ 
    currency = openDb("QSQLITE", "currency.sqlite"); 
} 

QSqlDatabase CurrencyDb::openDb(const QString &driver, const QString &name) const 
{ 
    QSqlDatabase db; 

    // contains() default argument is initialized to default connection 
    if (QSqlDatabase::contains()) 
    { 
     db = QSqlDatabase::database(QLatin1String(QSqlDatabase::defaultConnection), false); 
    } 
    else 
    { 
     db = QSqlDatabase::addDatabase(driver.toUpper()); 
    } 

    db.setDatabaseName(name); 

    if (!db.isValid()) 
    { 
     // Log error (last error: db.lastError().text()) and throw exception 
    } 

    if (!db.open()) 
    { 
     // Log error (last error: db.lastError().text()) and throw exception 
    } 

    return db; 
} 
関連する問題