Qt连接oracle数据库,oci驱动编译
前段时间项目需要,需连接并获取oracle数据库,查询资源文件在服务器端路径,并下载资源文件到本地进行加载、解析。所以对Qt连Oracle接数据库进行了一番学习,翻阅各种书籍,搜索各种博客,也是下了一番功夫。个把月过去发现快忘了,所以现在进行一下整理。
编译依赖库文件下载
想要编译Qt中自带的oci驱动,需要首先下载Oracle对oci驱动的支持文件:https://www.oracle.com/technetwork/topics/winx64soft-089540.html
这里感觉比较坑的点是Oracle网站需要登录。下载的版本为12.2.0.1.0,64和32位都需要下载,在编译不同版本驱动时需要连接不同版本的库文件。
页面如下图,下载 instantclient-sdk-windows.x64-12.2.0.1.0.zip(.lib和头文件)、instantclient-basic-nt-12.2.0.1.0.zip(.dll文件)。(32位同理)
下载完成后,讲32位和64位分别解压到instantclient12.2.0.1.0文件夹(自己随意创建),主要是使用方便,将各版本分别拷贝到各自文件夹下,如图(自定义两个文件夹):
将instantclient-basic-nt-12.2.0.1.0.zip解压出来的文件存储在bin(新建,自定义)目录下:
源码准备
需从Qt官网下载Qt编译源码,http://download.qt.io/archive/qt/
这里选择了Qt的版本的是5.7.0,可以下载单独的模块qtbase-everywhere-src-5.7.0.zip,也可以选择下载全的文件qt-everywhere-src-5.7.0.zip,找个路径解压一下:
使用VS打开路径下的.pro文件,如下图Qt VS Tools菜单第三项子菜单:
解压目录如下:
选择oci目录下的.pro文件:
打开工程如下:
,打开之后系统会自动创建出VS工程。这里使用过的VS位2013版本。
打开之后,会提示,头文件#include <oci.h>找不到,这里就需要用到我们前面所准备的Oracle SDK库文件了。
编译前配置
第一步:选择工程,鼠标右键【属性】,修改该页面的【输出目录】,如果不修改,最后生成的文件会被放置在Qt版本所在路径(即,$(QTDIR)所决定的目录),这里进行了修改,生成在本地工程文件的上一层目录
修改如下:
第二步:添加引用头文件【(全路径)instantclient12.2.0.1.0\x64\instantclient_12_2\sdk\include】,
配置oci.lib文件,如果已存在则不需要添加(默认是已经存在的):
添加lib库的附加库目录:
第三步:编译生成
如上图,即已经生成了qsqlocid.lib和qsqlocid.dll文件。
当前步骤是生成了64位Debug版本,Release版本和32位的配置、生成同理。
最后需要将申城的库文件,拷贝到程序根目录的sqldrivers目录下,程序运行时即可加载。
最后
程序在运行时需要将oci.dll、oraons.dll、oraociei12.dll,拷贝到可执行文件的根目录同级目录,程序运行时需要加载这些文件。
如此,连接数据的所需要的驱动准备就都编译和拷贝完成了。
最后的最后,不同版本Qt编译出来的驱动库不通用,即不同版本的Qt使用驱动库时都需要在此版本基础上进行源码编译,否则调用会成功。实则一通百通,一个版本能够编译成功,其他版本应该也不会有难度。需要用到时,再进行编译不迟。
下载服务端资源文件时,使用的时http协议,直接访问服务端配置的文件路径。使用Qt的网络请求模块请求文件,写到缓存目录或直接操作。不知此方法是否正确,后续再研究有无更好的解决方案。