前言
最近工作中,有家医院的HIS使用的是oracle数据库(oracle11g),最终方案采用qt5.6.2桌面应用程序远程连接内网oracle的方式。
一、准备工作
- qt5.6.2-msvc32下载安装
版本为qt-opensource-windows-x86-msvc2015-5.6.2.exe,安装时必须带有源码。 - oracle对oci驱动支持的文件下载
我这里选择是32位的,版本为Version 11.2.0.4.0
下载地址:https://www.oracle.com/database/technologies/instant-client/downloads.html - 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服务程序,双击运行后,发现远程连接数据库成功。