已经弃坑,不再使用Qt工具,有疑问可以查阅博主的其它博客,看看有没有解决方案,如果还没有可以百度或Google搜一下其他博主的教程!谢谢~
我们都知道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 }
有问题请留言,或者发邮箱给我:1285015525@qq.com