【Qt】Qt5.12版本编译Oracle驱动教程
00. 目錄
文章目錄
- 00. 目錄
- 01. Qt5.12安裝
- 02. Qt安裝注意事項
- 03. Qt版本和Oracle安裝路徑說明
- 04. Qt5.12編譯Oracle驅動(使用MinGW 64位)
- 05. 贊賞
QT因為授權問題,默認是不支持Oracle數據庫連接驅動的,需要自己解決, 該方法適用于QT5.12版本或者以上
01. Qt5.12安裝
【Qt5.12】Qt5.12安裝教程
02. Qt安裝注意事項
安裝Qt的時候只需要選擇MinGW和Sources源碼
03. Qt版本和Oracle安裝路徑說明
Qt版本是Qt5.12
Qt安裝路徑是H:\Qt\Qt5.12.2
Oracle客戶端安裝版本是Oracle 11g
Oracle客戶端安裝的路徑是H:\app\deng\product\11.2.0\client_1
04. Qt5.12編譯Oracle驅動(使用MinGW 64位)
step 1: 打開源碼
打開目錄H:H:\Qt\Qt5.12.2\5.12.2\Src\qtbase\src\plugins\sqldrivers\oci下的oci.pro文件
選擇配置項目
直接編譯出現如下錯誤
step 2: 修改配置文件(如果編譯套件是64位的選擇64位的庫)
修改配置文件如下:
TARGET = qsqlociHEADERS += $$PWD/qsql_oci_p.h SOURCES += $$PWD/qsql_oci.cpp $$PWD/main.cpp#注釋該行 #QMAKE_USE += oci#根據Oracle客戶端安裝路徑 指定oci.dll QMAKE_LFLAGS +=H:\app\deng\product\11.2.0\client_1\BIN\oci.dll#根據Oracle客戶端安裝路徑 指定頭文件目錄 INCLUDEPATH += H:\app\deng\product\11.2.0\client_1\oci\include#根據安裝的Oracle客戶端指定libPath LIBPATH += H:\app\deng\product\11.2.0\client_1\oci\lib\msvcdarwin:QMAKE_LFLAGS += -Wl,-flat_namespace,-U,_environOTHER_FILES += oci.jsonPLUGIN_CLASS_NAME = QOCIDriverPlugin include(../qsqldriverbase.pri)紅色部分為修改部分
step3: 編譯
編譯之后報錯,錯誤信息如下
問題分析
在Qt5.12里面調用的是OCIBindByPos2()函數,這個函數的第九個參數的數據類型是ub4*,但是根據oracle官方的說法:在這里找到的思路:是新的OCIBindByPos2()函數和以前的OCIBindByPos()函數有一定的區別,為了能在最新的Qt5.12上能成功編譯Oracle驅動,我們需要對oci項目下的qsql_oci.cpp的1559行代碼附近進行修改。
原來代碼如下:
問題解決
oci項目下的qsql_oci.cpp的1559行代碼附近進行修改。
修改之后內容如下:
// binding the column r = OCIBindByPos(d->sql, &bindColumn.bindh, d->err, i + 1,bindColumn.data,bindColumn.maxLen,bindColumn.bindAs,bindColumn.indicators,reinterpret_cast<ub2*>(bindColumn.lengths),0,arrayBind ? bindColumn.maxarr_len : 0,arrayBind ? &bindColumn.curelep : 0,OCI_DEFAULT);這么做是將OCIBindByPos2()函數替換成OCIBindByPos()但是OCIBindByPos()函數的第九個參數是ub2*,但是實際上
bindColumn.length實際上是ub4*,因此需要一個強制轉換,轉換完畢之后,qmake,然后重新生成項目即可,這樣就完全解決這個問題了。
step 4: 重新編譯
之后再重新編譯,就會發現編譯通過了,這時候我們在Qt安裝的根目錄下面去找 “ H:\plugins ”會發現里面有一個“ sqldrivers ”文件夾,將sqldrivers中的動態庫復制到Qt的H:\Qt\Qt5.12.2\5.12.2\mingw73_64\plugins\sqldrivers下面即可。
step 5: 測試
測試代碼
//1. 加載驅動QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");//2. 設置主機名db.setHostName("192.168.21.25");//3. 設置數據庫db.setDatabaseName("orcl");//4. 設置用戶名db.setUserName("scott");//5. 設置密碼db.setPassword("11");//6. 設置端口db.setPort(1521);//7. 打開數據庫bool ok = db.open();if (ok){qDebug() << "連接Oracle數據庫ok ";}else{qDebug() << "連接Oracle數據庫失敗 " << db.lastError().text();}//8. 關閉連接if (db.isOpen()){db.close();}測試結果:
注意
軟件的發布和測試
軟件發布,部署的時候,需要復制oci.dll 到與exe同級目錄下。驅動一起放在 exe 同級下的/sqldrivers目錄下。注意程序源代碼要增加: QApplication::addLibraryPath("./plugins"); 讓qt啟用插件目錄,例如上邊的sqldrivers目錄下各種驅動。
05. 贊賞
總結
以上是生活随笔為你收集整理的【Qt】Qt5.12版本编译Oracle驱动教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【电子书类】C/C++电子书下载汇总
- 下一篇: 【教学课件】IT教学课件和课程考试资料汇