QT QODBC數(shù)據(jù)庫編程連接詳細(xì)介紹
QT QODBC數(shù)據(jù)庫編程連接詳細(xì)介紹是本文所介紹的內(nèi)容,QT為數(shù)據(jù)庫編程提供了一個類似JDBC的統(tǒng)一操作模型,它的底層是具體數(shù)據(jù)庫或數(shù)據(jù)庫接口的插件,由它們負(fù)責(zé)完成真正的數(shù)據(jù)庫操作。
QT自帶有QODBC Driver,在Windows平臺上通過系統(tǒng)提供的ODBC Driver可以訪問支持ODBC的數(shù)據(jù)庫,如Ms Access、SQL Server等 (Windows XP 自帶有Access和SQL Server的ODBC Driver)。
QT數(shù)據(jù)庫模型的基礎(chǔ)類是QSqlDatabase對象,擁有一個QSqlDatabase對象代表著擁有一個數(shù)據(jù)庫的連接,在一個已經(jīng)Open的QSqlDatabase對象上,我們就可以執(zhí)行各種數(shù)據(jù)庫操作。
要得到一個QSqlDatabase對象的方法是QSqlDatabase的靜態(tài)函數(shù)addDatabase,它創(chuàng)建一個新的QSqlDatabase對象,并注冊在內(nèi)部的Hash表中,***返回該對象。 (另外靜態(tài)函數(shù)database可用于查詢一個已經(jīng)注冊的QSqlDatabase對象)
當(dāng)我們得到一個新的還沒有Open的QSqlDatabase對象,我們要先設(shè)置數(shù)據(jù)庫的DSN(Data Source Name),DSN的設(shè)置是通過成員函數(shù)setDatabaseName,在QODBC中,DSN可以是多種形式
1、操作系統(tǒng)注冊的DSN名字
2、一個外部的DSN文件
3、可以被解釋的字符串
1和2我們可以在管理面板的ODBC管理面板里面設(shè)置或者生成,但是無疑第3種形式更具備靈活性,連接Access的DSN字符串具備類似的形式:
- "DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=xxx.mdb"
下面是一段用于獲得某個指定的mdb文件的數(shù)據(jù)庫連接的代碼,函數(shù)會先檢測是否系統(tǒng)已有該文件的數(shù)據(jù)庫連接,如果有則再檢查該連接是否已打開,如果已打開則直接返回,如果有連接但處于關(guān)閉狀態(tài)中則打開后返回,如果還未有任何連接則創(chuàng)建一個新的連接,打開后返回。***打開失敗會拋出一個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;
- }
小結(jié):QT QODBC數(shù)據(jù)庫編程連接詳細(xì)介紹的內(nèi)容介紹完了,希望本文對你有幫助,關(guān)于數(shù)據(jù)庫的更多內(nèi)容請參考編輯推薦。