咱們都知道oracle數據庫的強大,而且好多企業或者教學用到數據庫時都會推薦使用。可是Qt由於版權問題沒有封裝oracle數據庫專用驅動,網上也有一大堆說法和教程,可是或多或少的都有問題。下面廢話很少少,直接上教程。sql
注:本教程採用Qt5.5.1版原本講下Qt5.5.1和Qt5.3.2編譯OCI驅動過程,其餘版本請對號入座。數據庫
個人Qt版本是Qt5.5.1,安裝路徑是默認的 C:\Qt\Qt5.5.1。oracle
個人oracle 11g客戶端安裝路徑: D:\app\client\product\11.2.0\client_1。app
1、咱們安裝oracle11g,oracle下載與安裝我再也不累贅,網上一大堆安裝方法。this
(通過驗證,發現不添加系統變量也能夠編譯,故此將其劃掉)spa
2、咱們打開環境變量在系統變量的PATH中添加code
而後保存退出,Win+R打開運行輸入cmd,在「命令提示符cmd」中輸入qmake -v與mingw32-make -v查看一下版本號和輸出路徑是否是咱們剛剛設置的,由於不少人電腦上都裝了好多版本的Qt,固然這裏我爲了方便把其餘版本的都卸載了。orm
不要小看這些小細節,他們看起來雖有些微不足道,可是當你編譯出了問題後,你還真不知道從哪下手,因此要切記這一點,直接將你想要的設到環境變量中去。blog
2、打開oci文件夾:C:\Qt\Qt5.5.1\5.5\Src\qtbase\src\plugins\sqldrivers\oci教程
3、打開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
5、構建 → 從新構建項目 「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驅動教程,就到這裏結束了。
4、驗證
如何驗證?網上驗證方法一大堆,在這我也貼出一個。
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 }
有問題請留言,或者發郵箱給我:1285015525@qq.com