最近使用qt開發了一個訪問數據庫的工具, 默認使用ODBC驅動注入的方式,後來發現Oracle中ODBC驅動注入常常失敗。sql
後來就想直接使用OCI方式訪問,而默認狀況下Qt只有Sqlite和ODBC驅動,OCI須要本身編譯安裝; 網上有相應的驅動安裝介紹,本身實驗可行:數據庫
編譯前置條件:oracle
1. QT源碼安裝,須要包含src目錄中的源碼工具
2. Oracle驅動源碼安裝, 須要有OCI驅動源碼,不然沒法編譯測試
環境要求:spa
QT環境:Qt 5.3.2 /MinGW4.7.2/WIN7 32bitcode
打開Qt Command Prompt,分別執行如下命令,以編譯Oracle驅動:blog
set INCLUDE=%include%;C:\oracle\product\10.2.0\db_1\OCI\include;C:\Qt\Qt5.3.2\Tools\MinGW\include set LIB=%lib%;C:\oracle\product\10.2.0\db_1\OCI\lib\MSVC cd C:\Qt\Qt5.3.2\5.3.2\Src\qtbase\src\plugins\sqldrivers\oci qmake oci.pro mingw32-make
其中,C:\oracle\product\10.2.0\db_1\OCI\include爲Oracle OCI驅動源碼所在目錄,D:/QT/mingw/include爲編譯環境的位置。ci
執行完以上語句,就會生成libqsqloci.a、libqsqlocid.a、qsqloci.dll、qsqlocid.dll四個文件,把它們copy到C:\Qt\Qt5.0.2\5.0.2\mingw47_32\plugins\sqldrivers目錄中便可。
在程序中測試:開發
#include <QCoreApplication> #include <QtSql/QSqlDatabase> #include <QDebug> #include <QStringList> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); qDebug()<<「Available drivers:」; QStringList drivers = QSqlDatabase::drivers(); foreach(QString driver, drivers) qDebug() <<「/t」 << driver; return a.exec(); }
能夠看到對應的驅動列表:
驅動沒有問題以後能夠使用如下代碼測試下是否能夠連通oracle數據庫
#include <QCoreApplication> #include <QtSql> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QSqlDatabase db = QSqlDatabase::addDatabase("QOCI"); db.setHostName("MY_IP_OR_HOST_NAME"); db.setDatabaseName("XE"); db.setUserName("test"); db.setPassword("test_password"); if (!db.open()) { qDebug() << db.lastError().text(); } else{ qDebug() << "Wow opened"; } return a.exec(); }