我们都知道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.5.1和Qt5.3.2编译OCI驱动教程及验证方法的更多相关文章

  1. Qt5编译oracle驱动教程

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

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

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

  3. Qt5.5.0在Windows下静态编译(修改参数以后才能支持XP)good

    测试系统环境: windows 7 编译软件环境: vs2013 + QT5.5.0 [源码地址:http://download.qt.io/official_releases/qt/5.5/5.5. ...

  4. Qt5.5.0在Linux下静态编译(加上-fontconfig编译项才能显示中文) good

    测试系统环境:Ubuntu12.04 (32bit/64bit)编译软件环境:QT5.5.0   本文章主要介绍Linux下QT静态编译环境的搭建,以及如何编译我们的程序board_driver. 1 ...

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

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

  6. Qt编译Oracle OCI驱动

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

  7. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

  8. Android 源码编译及常见错误及解决方法

    最近要往arm开发板上移植android系统,大大小小的问题遇到了太多太多,都是泪啊.本人初接触嵌入式开发,对问题的根源不是太了解,不过好在每解决一个问题,便记录一下.话不多说,正式罗列问题: hos ...

  9. linux下编译运行驱动

    linux下编译运行驱动 嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发. 按照如下方 ...

随机推荐

  1. 【CC2530入门教程-01】IAR集成开发环境的建立与项目开发流程

    [引言] 本系列教程就有关CC2530单片机应用入门基础的实训案例进行分析,主要包括以下6部分的内容:1.CC2530单片机开发入门.2.通用I/O端口的输入和输出.3.外部中断初步应用.4.定时/计 ...

  2. thinkphp中find()和select()的区别

    1.find()是查找符合条件的第一条数据,返回的是一个一维数组: select()是查找符合条件的所有的数据,返回的是一个二维数组: 2.以下案例 $tech=M('techlevel','HR_C ...

  3. 通过位异或来交换a,b的值和通过中间变量交换a,b的值

    //通过位异或来交换a,b的值 #include <stdio.h> int main(int argc, const char * argv[]) {    int a=20,b=10; ...

  4. web移动端布局方式整理

    写H5页面一直写的有点随意,只是保证了页面在各个屏幕下显示良好,却没有保证到在各个屏幕下是等比例放大或者缩小.这些天在写一些页面,试着看看能不能写出等比例放大缩小的页面,发现不容易啊,在网上找了一些文 ...

  5. nginx二级域名配置自动跳转到一级域名

    nginx二级域名配置自动跳转到一级域名 rewrite配置内容: if ($http_host !~ "^www.aaa.com$") { rewrite ^(.*) http: ...

  6. Vulkan Tutorial 24 Descriptor pool and sets

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 描述符布局描述了前一章节讨论过的可以绑定的描述符的类型.在 ...

  7. 学习Java绝对要懂的,Java编程中最常用的几种排序算法!

    今天给大家分享一下Java中几种常见的排序算法的Java代码 推荐一下我的Java学习羊君前616,中959,最后444.把数字串联起来!     ,群里有免费的学习视频和项目给大家练手.大神有空时也 ...

  8. 【LeetCode】225. Implement Stack using Queues

    题目: Implement the following operations of a stack using queues. push(x) -- Push element x onto stack ...

  9. 【Android Developers Training】 14. 序言:管理Activity生命周期

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  10. Example015实现html中checkbox的全选和反选(2)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...