1. 程式人生 > >QT中操作資料庫(ACCESS、MySql)

QT中操作資料庫(ACCESS、MySql)

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字串具備類似的形式:

  1. "DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=xxx.mdb" 

下面是一段用於獲得某個指定的mdb檔案的資料庫

連線的程式碼,函式會先檢測是否系統已有該檔案的資料庫連線,如果有則再檢查該連線是否已開啟,如果已開啟則直接返回,如果有連線但處於關閉狀態中則開啟後返回,如果還未有任何連線則建立一個新的連線,開啟後返回。最後開啟失敗會丟擲一個KDBException異常。

  1. QSqlDatabase KDBConnection::getAccessConnection(  
  2.     const QString& accessFile, const QString& userName,  
  3.     const QString& password)  
  4. ...{  
  5.     const QString PREFIX("puremilk.access.connection");  
  6.     QString connID = PREFIX + "-" + accessFile;  
  7.     QSqlDatabase connection = QSqlDatabase::database(connID, false);  
  8.     if (connection.isValid())  
  9.     ...{  
  10.         if (connection.isOpen())  
  11.             return connection;  
  12.     }  
  13.     else  
  14.         connection = QSqlDatabase::addDatabase("QODBC", connID);  
  15.     QString dsn = QString(  
  16.         "DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=%1").arg(accessFile);  
  17.     qDebug()<<"Get Access Database connection - "<<dsn;  
  18.     connection.setDatabaseName(dsn);  
  19.     if (!connection.open(userName, password))  
  20.     ...{  
  21.         THROW_EXCEPTION(KDBException, connection.lastError().text());  
  22.     }  
  23.     return connection;  

小結:QT QODBC資料庫程式設計連線詳細介紹的內容介紹完了,希望本文對你有幫助,關於資料庫的更多內容請參考編輯推薦。