我們都知道oracle數據庫的強大,並且好多企業或者教學用到數據庫時都會推薦使用。但是Qt因爲版權問題沒有封裝oracle數據庫專用驅動,網上也有一大堆說法和教程,但是或多或少的都有問題。下面廢話不多少,直接上教程。
(本文只出現在Aili_Xiao的博客中,目前在博客園和CDSN中)
注:本教程採用Qt5.5.1版本來講下Qt5.5.1和Qt5.3.2編譯OCI驅動過程,其他版本請對號入座。
我的Qt版本是Qt5.5.1,安裝路徑是默認的 C:\Qt\Qt5.5.1。
我的oracle 11g客戶端安裝路徑: D:\app\client\product\11.2.0\client_1。
一、我們安裝oracle11g,oracle下載與安裝我不再累贅,網上一大堆安裝方法。
(經驗證,不添加環境變量也可以編譯,故此將其劃掉)
二、我們打開環境變量在系統變量的PATH中添加
然後保存退出,Win+R打開運行輸入cmd,在“命令提示符cmd”中輸入qmake -v與mingw32-make -v查看一下版本號和輸出路徑是不是我們剛剛設置的,因爲很多人電腦上都裝了好多版本的Qt,當然這裏我爲了方便把其他版本的都卸載了。
不要小看這些小細節,他們看起來雖有些微不足道,但是當你編譯出了問題後,你還真不知道從哪下手,所以要切記這一點,直接將你想要的設到環境變量中去。
二、打開oci文件夾:C:\Qt\Qt5.5.1\5.5\Src\qtbase\src\plugins\sqldrivers\oci
三、打開oci工程,在Pro文件中添加:
INCLUDEPATH += D:\app\client\product\11.2.0\client_1\oci\include
LIBPATH += D:\app\client\product\11.2.0\client_1\oci\lib\msvc
四、構建 → 重新構建項目 “oci”
在Qt5.3.2中:
等待程序構建完畢後,打開C:\Qt\Qt5.3.2\5.3\Src\qtbase\plugins\sqldrivers,可以看到有四個文件將文件全部複製到C:\Qt\Qt5.3.2\5.3\mingw482_32\plugins\sqldrivers中。
在Qt5.5.1中:
等待程序構建完畢後,打開C:\plugins\sqldrivers,可以看到有四個文件將文件全部複製到C:\Qt\Qt5.5.1\5.5\mingw482_32\plugins\sqldrivers中。
有人會說我找不到這個C:\Qt\Qt5.3.2\5.3\Src\qtbase\plugins\sqldrivers路徑,這個路徑在新版本中Qt官方改了,就像Qt5.5.1的這個路徑默認在Qt安裝的根目錄裏面,就是C:\plugins\sqldrivers.
Qt5.5.1和Qt5.3.2編譯OCI驅動教程,就到這裏結束了。
五、驗證
如何驗證?網上驗證方法一大堆,在這我也貼出一個。
1 #include "widget.h" 2 #include <QStringList> 3 #include <QSqlQuery> 4 #include <QSqlError> 5 #include <QSqlDatabase> 6 7 #include <QMessageBox> 8 #include <QDebug> 9 /*********************************************** 10 * 作者:夜瀟 11 * QQ:1285015525 12 * 博客:http://www.cnblogs.com/CLXiao-1029/ 13 * ********************************************/ 14 15 Widget::Widget(QWidget *parent) 16 : QWidget(parent) 17 { 18 //查看所有數據庫驅動 19 QStringList lists = QSqlDatabase::drivers(); 20 21 for(int i = 0 ;i < lists.size(); ++ i) 22 { 23 qDebug() << lists.at(i); 24 } 25 //載入oracle驅動,打開本地數據庫 26 QSqlDatabase db2=QSqlDatabase::addDatabase("QOCI"); 27 db2.setHostName(tr("127.0.0.1"));//如果連接遠程數據庫,就把IP換成對方的,並且遠程防火牆是關閉的 28 db2.setPort(1521); 29 db2.setUserName(tr("scott"));//這個用戶是默認的,如何打開這個用戶,自己百度 30 db2.setPassword(tr("1029"));//這個是我的口令 31 db2.setDatabaseName(tr("orcl")); 32 if(!db2.open()) 33 { 34 QMessageBox::information(this, tr("提示"), tr("Oracle數據庫連接失敗!")); 35 qDebug() <<"error_Oracle:\n" << db2.lastError().text(); 36 return; 37 } 38 else 39 { 40 QMessageBox::information(this, tr("提示"), tr("Oracle數據庫連接成功!")); 41 QSqlQuery query; 42 bool isok = query.exec("select * from xsb"); 43 if(!isok) 44 { 45 db2.close(); 46 return; 47 } 48 query.next(); 49 QString Str1 = query.value(1).toString(); 50 QString Str2 = query.value(2).toString(); 51 QString Str3 = query.value(3).toString(); 52 QString Str4 = query.value(4).toString(); 53 QString Str5 = query.value(5).toString(); 54 QString Str6 = query.value(6).toString(); 55 QString Str7 = query.value(7).toString(); 56 qDebug() << QObject::tr("xsb:" )<< Str1<<Str2<< Str3<<Str4<< Str5<<Str6<<Str7; 57 } 58 59 }
有問題請留言,或者發郵箱給我:[email protected]