Qt5編譯oracle驅動教程

我們都知道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 -vmingw32-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] 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章