QT QODBC數據庫編程連接詳細介紹
QT QODBC數據庫編程連接詳細介紹是本文所介紹的內容,QT為數據庫編程提供了一個類似JDBC的統一操作模型,它的底層是具體數據庫或數據庫接口的插件,由它們負責完成真正的數據庫操作。
QT自帶有QODBC Driver,在Windows平臺上通過系統提供的ODBC Driver可以訪問支持ODBC的數據庫,如Ms Access、SQL Server等 (Windows XP 自帶有Access和SQL Server的ODBC Driver)。
QT數據庫模型的基礎類是QSqlDatabase對象,擁有一個QSqlDatabase對象代表著擁有一個數據庫的連接,在一個已經Open的QSqlDatabase對象上,我們就可以執行各種數據庫操作。
要得到一個QSqlDatabase對象的方法是QSqlDatabase的靜態函數addDatabase,它創建一個新的QSqlDatabase對象,并注冊在內部的Hash表中,***返回該對象。 (另外靜態函數database可用于查詢一個已經注冊的QSqlDatabase對象)
當我們得到一個新的還沒有Open的QSqlDatabase對象,我們要先設置數據庫的DSN(Data Source Name),DSN的設置是通過成員函數setDatabaseName,在QODBC中,DSN可以是多種形式
1、操作系統注冊的DSN名字
2、一個外部的DSN文件
3、可以被解釋的字符串
1和2我們可以在管理面板的ODBC管理面板里面設置或者生成,但是無疑第3種形式更具備靈活性,連接Access的DSN字符串具備類似的形式:
- "DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=xxx.mdb"
下面是一段用于獲得某個指定的mdb文件的數據庫連接的代碼,函數會先檢測是否系統已有該文件的數據庫連接,如果有則再檢查該連接是否已打開,如果已打開則直接返回,如果有連接但處于關閉狀態中則打開后返回,如果還未有任何連接則創建一個新的連接,打開后返回。***打開失敗會拋出一個KDBException異常。
- QSqlDatabase KDBConnection::getAccessConnection(
- const QString& accessFile, const QString& userName,
- const QString& password)
- ...{
- const QString PREFIX("puremilk.access.connection");
- QString connID = PREFIX + "-" + accessFile;
- QSqlDatabase connection = QSqlDatabase::database(connID, false);
- if (connection.isValid())
- ...{
- if (connection.isOpen())
- return connection;
- }
- else
- connection = QSqlDatabase::addDatabase("QODBC", connID);
- QString dsn = QString(
- "DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=%1").arg(accessFile);
- qDebug()<<"Get Access Database connection - "<<dsn;
- connection.setDatabaseName(dsn);
- if (!connection.open(userName, password))
- ...{
- THROW_EXCEPTION(KDBException, connection.lastError().text());
- }
- return connection;
- }
小結:QT QODBC數據庫編程連接詳細介紹的內容介紹完了,希望本文對你有幫助,關于數據庫的更多內容請參考編輯推薦。