我们都知道oracle数据库的强大,并且好多企业或者教学用到数据库时都会推荐使用。但是Qt因为版权问题没有封装oracle数据库专用驱动,网上也有一大堆说法和教程,但是或多或少的都有问题。下面废话不多少,直接上教程。

注:本教程采用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驱动教程,就到这里结束了。

四、验证

如何验证?网上验证方法一大堆,在这我也贴出一个。

 #include "widget.h"
#include <QStringList>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlDatabase> #include <QMessageBox>
#include <QDebug>
/***********************************************
* 作者:夜潇
* QQ:1285015525
* 博客:http://www.cnblogs.com/CLXiao-1029/
* ********************************************/ Widget::Widget(QWidget *parent)
: QWidget(parent)
{
//查看所有数据库驱动
QStringList lists = QSqlDatabase::drivers(); for(int i = ;i < lists.size(); ++ i)
{
qDebug() << lists.at(i);
}
//载入oracle驱动,打开本地数据库
QSqlDatabase db2=QSqlDatabase::addDatabase("QOCI");
db2.setHostName(tr("127.0.0.1"));//如果连接远程数据库,就把IP换成对方的,并且远程防火墙是关闭的
db2.setPort();
db2.setUserName(tr("scott"));//这个用户是默认的,如何打开这个用户,自己百度
db2.setPassword(tr(""));//这个是我的口令
db2.setDatabaseName(tr("orcl"));
if(!db2.open())
{
QMessageBox::information(this, tr("提示"), tr("Oracle数据库连接失败!"));
qDebug() <<"error_Oracle:\n" << db2.lastError().text();
return;
}
else
{
QMessageBox::information(this, tr("提示"), tr("Oracle数据库连接成功!"));
QSqlQuery query;
bool isok = query.exec("select * from xsb");
if(!isok)
{
db2.close();
return;
}
query.next();
QString Str1 = query.value().toString();
QString Str2 = query.value().toString();
QString Str3 = query.value().toString();
QString Str4 = query.value().toString();
QString Str5 = query.value().toString();
QString Str6 = query.value().toString();
QString Str7 = query.value().toString();
qDebug() << QObject::tr("xsb:" )<< Str1<<Str2<< Str3<<Str4<< Str5<<Str6<<Str7;
} }

有问题请留言,或者发邮箱给我:1285015525@qq.com

Qt5编译oracle驱动教程的更多相关文章

  1. Qt5.5.1和Qt5.3.2编译OCI驱动教程及验证方法

    我们都知道oracle数据库的强大,并且好多企业或者教学用到数据库时都会推荐使用.但是Qt因为版权问题没有封装oracle数据库专用驱动,网上也有一大堆说法和教程,但是或多或少的都有问题.下面废话不多 ...

  2. Qt5.8以上版本编译Oracle数据库的OCI驱动教程

    在前一篇的文章中我已经发过一个相似的文章,详情请点击:Qt5编译oracle驱动教程. 在那一篇文章中已经可以解决了Qt5的常用版本的Oracle数据库驱动的支持,但是在新的Qt开发工具中那种方法竟然 ...

  3. Qt编译好的oracle驱动下载

    在上文,我累赘了一大堆,给大家写了一篇Qt如何编译OCI驱动,在这里自然就不再累赘了,直接附上编译好的文件供大家下载: <Qt5.3.1+OCI驱动下载地址> 有经济来源的请传送:http ...

  4. Qt编译Oracle OCI驱动

    最近使用qt开发了一个访问数据库的工具, 默认使用ODBC驱动注入的方式,后来发现Oracle中ODBC驱动注入经常失败. 后来就想直接使用OCI方式访问,而默认情况下Qt只有Sqlite和ODBC驱 ...

  5. qt (5.60/5.70) 编译 QOCI 驱动

    转载请注明原文链接http://www.cnblogs.com/majianming/p/5925105.html 在学习qt过程中,遇到了编译oracle驱动的问题,在开源协议下没有编译好的,那就只 ...

  6. Solaris 10下Qt编译Oracle 10g驱动

    上回书讲到<Oracle 10g在Solaris 10中安装详解>,现在开始用Qt来编译下Oracle 10g驱动吧!这样就可以通过Qt程序联入Oracle数据库了! Oracle的环境变 ...

  7. Maven教程(4)--Maven管理Oracle驱动包

    由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 手动添加到本地仓库需要本地有 ...

  8. 迅为4412开发板Linux驱动教程——编写简单应用调用驱动

    Linux驱动教程:http://pan.baidu.com/s/1c0hljUS 编写简单应用调用驱动--头文件 • 打印头文件 – include <stdio.h>调用打印函数pri ...

  9. Qt5 编译 & 打包依赖dll发布

    十年前学C++的时候,无聊到把windows 文件夹下几乎所有的*.dll 都看过一遍.偶尔在程序运行时看到缺少 *.dll 的提示,都会直接找出来解决. 随着“开发平台”和“编译器”版本的逐年升级, ...

随机推荐

  1. 【洛谷P3916】图的遍历

    题目大意:给定一个 N 个点,M 条边的有向图,求每个点能够到达的节点的最大编号是多少. 题解:因为题中所给图不一定是一个 DAG,因此无法进行按照拓扑序来动态规划,需要另辟蹊径.由于求的是每个节点能 ...

  2. 滚动条事件,当页面滚动到距顶部一定高度时某DIV自动隐藏和显示

    $(function () {                        //绑定滚动条事件              //绑定滚动条事件            $(window).bind(&q ...

  3. div 内table 居中实现代码

    有时候在一个div里面添加一个表格,如想让它居住排列,需要做如下的操作. css代码:   代码如下: #dlgReply { /*display: table-cell; text-align: c ...

  4. C#访问和操作MYSQL数据库

    这里介绍下比较简单的方式,引用MySql.Data.dll然后添加一个MySqlHelper类来对MySql数据库进行访问和操作. 1.将MySql.Data.dll引用到你的项目中 下载地址:MyS ...

  5. 多线程(模拟买票)-----java基础知识总结

    这次的的问题引入的比较深入,如果看了这篇博客,不看下一篇,你会很懵逼. 代码: package com.day13.math; /** * 类说明 :模拟三个窗口同时售票 * @author 作者 : ...

  6. 使用Python的turtle(海龟)模块画图

    第一步:让Python引入turtle模块,引入模块就是告诉Python你想要用它. import turtle 第二步:创建画布.调用turtle中的Pen函数 t = turtle.Pen() 第 ...

  7. [原]Android 初遇Http错误 httpClient.execute

    错误源头: HttpResponse response = httpClient.execute(httpget); 错误信息: android.os.NetworkOnMainThreadExcep ...

  8. JavaScript继承详解(二)

    这一章我们将会重点介绍JavaScript中几个重要的属性(this.constructor.prototype), 这些属性对于我们理解如何实现JavaScript中的类和继承起着至关重要的作用. ...

  9. SDWebImage源码阅读-第二篇

    一  SDWebImageManager的downloadImageWithURL的方法 上一篇,我们刚开了个头,分析了一下开始加载图片之前如何取消其他正在下载的任务,接着,我们回到 - (void) ...

  10. HTTP::UserAgent注意问题

    例用 HTTP::Request 设置头信息时, 比如 add-content , 第二次再执行 add-content 时, content 内容会追加, 并不会重新添加. 当下次再 add-con ...