很好的QSqlDatabase問題說明,關於連接錯誤(轉)


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

編譯無問題,在執行時終端出現以下字母

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

 


執行中的數據庫操作如下
QT數據庫錯誤    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
QT數據庫錯誤
QT數據庫錯誤    db.setDatabaseName("C:/workspace/GData.s3db");
QT數據庫錯誤     if(!db.open())
QT數據庫錯誤    {
QT數據庫錯誤        cout<<"open database failed!"<<endl;
QT數據庫錯誤         return 0;
QT數據庫錯誤     }
QT數據庫錯誤    QSqlQuery query("select XmlValue from GBond where BondId=3", db);
QT數據庫錯誤
QT數據庫錯誤     if (query.next())
QT數據庫錯誤    {
QT數據庫錯誤        QString stringXml = query.value(0).toString();
QT數據庫錯誤
QT數據庫錯誤         // do somethingQT數據庫錯誤
QT數據庫錯誤

QT數據庫錯誤     }
QT數據庫錯誤
QT數據庫錯誤    db.close();
QT數據庫錯誤    QSqlDatabase::removeDatabase("QSQLITE");

經查,是由於在數據庫使用過程中,又再次調用QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 造成了問題。
因此在其他地方的數據庫操作中修改此代碼。

可以在執行QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 不用默認的defaultConnection,自己加入名字,然后在每次的添加時可改為:
QT數據庫錯誤    QSqlDatabase db;
QT數據庫錯誤     if(QSqlDatabase::contains("GBond"))
QT數據庫錯誤        db = QSqlDatabase::database("GBond");
QT數據庫錯誤     else
QT數據庫錯誤        db = QSqlDatabase::addDatabase("QSQLITE", "GBond");

這樣該問題已解決。

但再次執行時出現了
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open

經查,這是由於在執行query.exec時沒有指定db。將所有執行query.exec改為
QT數據庫錯誤 // 原來
QT數據庫錯誤
QSqlQuery query;
QT數據庫錯誤query.exec("select XmlValue from GPlatform");
QT數據庫錯誤
QT數據庫錯誤 // 改為
QT數據庫錯誤

QT數據庫錯誤QSqlQuery query("select XmlValue from GPlatform", db);

這樣就可以了。
感謝原作者,轉:http://blog.sina.com.cn/s/blog_82544279010128iu.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM