Qt通过OCI远程连接oracle数据库


前言

  最近工作中,有家医院的HIS使用的是oracle数据库(oracle11g),最终方案采用qt5.6.2桌面应用程序远程连接内网oracle的方式。

一、准备工作

  1. qt5.6.2-msvc32下载安装
    版本为qt-opensource-windows-x86-msvc2015-5.6.2.exe,安装时必须带有源码。
  2. oracle对oci驱动支持的文件下载
    我这里选择是32位的,版本为Version 11.2.0.4.0
    下载地址:https://www.oracle.com/database/technologies/instant-client/downloads.html
  3. VS2015和Qt插件下载安装
    Qt插件下载地址:
    链接:https://pan.baidu.com/s/1YXzpV6Dwiqb1vAWuI_QJKQ
    提取码:4nx8
    双击安装,安装完成后运行VS2015,如下:
    在这里插入图片描述
    选择Qt Options,配置Qt版本,如下:
    在这里插入图片描述

二、编译32位驱动

待编译工程在:C:\Qt\Qt5.6.2\5.6\Src\qtbase\src\plugins\sqldrivers\oci目录下,使用VS中Qt插件打开oci.pro文件,如下:
在这里插入图片描述
编译,发现提示头文件#include <oci.h>找不到,这就需要配置前面下载的oracle驱动支持文件了。

1、添加头文件

选择工程,鼠标右键-属性,如下:
在这里插入图片描述
进入附加包含目录,选择sdk/include文件夹,如下:
在这里插入图片描述

2、添加lib库的附加库目录

操作如下:
在这里插入图片描述
进入附加库目录,选择sdk/lib/msvc文件夹,如下:
在这里插入图片描述

3、配置lib文件

操作如下:
在这里插入图片描述
进入附加依赖项,可以看到oci.lib已存在,如下:
在这里插入图片描述

4、编译

编译,编译成功输出如下:
在这里插入图片描述
在目录C:\Qt\Qt5.6.2\5.6\Src\qtbase\plugins\sqldrivers下,可以找到编译好的驱动文件,如下:
在这里插入图片描述

三、Qt操作数据库

将编译好的dll文件拷贝到目录C:\Qt\Qt5.6.2\5.6\msvc2015\plugins\sqldrivers下。
如下是连接数据库的代码:

bool Tmdatabase::connectDB()
{
    //
    database = QSqlDatabase::addDatabase("QOCI");
    database.setDatabaseName(QString("%1:%2/%3").arg(m_dbhost).arg(m_dbport).arg(m_dbname));
//    database.setHostName(m_dbhost);  //数据库主机名
//    database.setPort(m_dbport);
//    database.setDatabaseName(m_dbname);   //数据库名 
    database.setUserName(m_dbuser);      //数据库用户名
    database.setPassword(m_dbpass);      //数据库密码 
    //
    if (!database.open())
    {
        qDebug() << "oracle open fail error =" <<database.lastError().text();
        return false;
    }
    return true;
}

注意:针对oracle数据库,通过调用setDatabaseName函数以主机名:端口/服务名的形式连接,而不是单独设置。

四、远程访问

  我是写了一个简单的http服务程序,操作数据库的代码都在这个程序里面,http服务程序和Qt桌面应用程序部署在同一机器上,我们称为机器A。数据库在内网中的另一台机器上,我们称为机器B。
  在远程访问前,对机器A进行设置,因为A机器是双网卡,,所以为机器A设置了固定IP,最后ping机器B的IP地址,发现超时。此时,需要我们设置静态路由,在机器A上,以管理员用户进入命令行,输入如下命令:

route add 192.168.160.0 mask 255.255.255.0 192.168.140.254

其中,192.168.160.0为机器B(该机器IP为192.168.160.218)所在的网络,192.168.140.254为机器人A(该机器IP为192.168.140.112)所在网络的网关。
  再ping时,发现能成功ping通。在后面的使用过程中,发现机器A重启后,设置的静态路由失效,而我们需要永久有效,所以将设置命令修改如下:

route add -p 192.168.160.0 mask 255.255.255.0 192.168.140.254

  要想远程访问oracle数据库,不需要在本地安装oracle数据库服务端,可以只安装一个oracle客户端。
下载地址如下:
链接:https://pan.baidu.com/s/1gO7ahVwpJ38fV9HUWbN1pw
提取码:anmp
  安装完成后,进行系统变量设置,如下:
(1)添加系统变量NLS_LANG
(2)添加系统变量ORACLE_HOME
(3)添加系统变量TNS_ADMIN
请添加图片描述
请添加图片描述
添加环境变量,如下:
请添加图片描述
设置完成后,找到tnsnames.ora文件,根据自己的情况修改,如下:
在这里插入图片描述
部署http服务程序,双击运行后,发现远程连接数据库成功。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码的雪糕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值