QT SQLite 多資料庫操作大全

來源:互聯網
上載者:User

標籤:資料庫   sqlite   qt   

QT SQLite 多資料庫操作大全一.單資料庫模型

一般QT都是把開啟一個預設資料庫連接,操作一個資料庫連接,但是對Sqlite中頻率修改容易加鎖,因此有一種設計模式是把頻率修改的表放在不同的資料庫檔案中,但這樣要修改代碼操作資料庫部分
通常開啟代碼 http://developer.nokia.com/community/wiki/Creating_an_SQLite_database_in_Qt

bool DatabaseManager::openDB()    {    // Find QSLite driver    db = QSqlDatabase::addDatabase("QSQLITE");    #ifdef Q_OS_LINUX    // NOTE: We have to store database file into user home folder in Linux    QString path(QDir::home().path());    path.append(QDir::separator()).append("my.db.sqlite");    path = QDir::toNativeSeparators(path);    db.setDatabaseName(path);    #else    // NOTE: File exists in the application private folder, in Symbian Qt implementation    db.setDatabaseName("my.db.sqlite");    #endif    // Open databasee    return db.open();    }QSqlError DatabaseManager::lastError()    {    // If opening database has failed user can ask     // error description by QSqlError::text()    return db.lastError();    }bool DatabaseManager::deleteDB()    {    // Close database    db.close();    #ifdef Q_OS_LINUX    // NOTE: We have to store database file into user home folder in Linux    QString path(QDir::home().path());    path.append(QDir::separator()).append("my.db.sqlite");    path = QDir::toNativeSeparators(path);    return QFile::remove(path);    #else    // Remove created database binary file    return QFile::remove("my.db.sqlite");    #endif    }

這是最關鍵是兩步

QSqlDatabase db = QSqlDatabase::addDatabase(“QSQLITE”); #開啟資料庫
db.setDatabaseName(“my.db.sqlite”); #指定資料庫檔案

但是重複調用QSqlDatabase::addDatabase(“QSQLITE”); 時會報錯

QSqlDatabasePrivate::addDatabase: duplicate connection name ‘qt_sql_default_connection’, old connection removed.

二.同時開啟多個資料庫

QT本身是支援,只一般寫法用得少。成功的代碼如下,一般需要一個全域數組來儲存這些對象

QString dbName = "base.db" QSqlDatabase db ; if(QSqlDatabase::contains(dbName)){        //如已經開啟這個資料庫,直接調出這個資料連線      db = QSqlDatabase::database(dbName);    }else //否則開啟這個資料庫,注意帶上資料庫名      db = QSqlDatabase::addDatabase("QSQLITE",dbName);
三.相關資料庫的類調用

因為引入多資料庫,相應類調用都要引入資料庫連接對象。

3.1 QSqlQuery

SQL 查詢類,可以執行各種Sql指令。預設使用方法是

  QSqlQuery query();  query.exec("select * from table1");

但這種情況,在多資料庫模式會報錯,提示,>QSqlQuery::exec: database not open

其實這是調用預設的資料連線又未開啟這個造成,可以在初始化是直接資料庫物件

QSqlDatabase db ; //已經開啟資料庫物件  QSqlQuery query(db);  query.exec("select * from table1");
3.2 QSqlQueryModel 類

這個也是常用的類,與各種控制項配合相當好用,

它的指定資料庫連接言式是在調用setQuery時,

QSqlDatabase db ; //已經開啟資料庫物件QSqlQueryModel * sqlModel = new QSqlQueryModel();   sqlModel->setQuery("select * from table",db);

QT SQLite 多資料庫操作大全

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.