QT因为授权问题,默认是不支持Oracle数据库连接驱动的,需要自己解决,目前有两个方案:
1. 网上搜索别人编译好的驱动(本质上就是两个dll),这个需要你的QT版本,操作系统位数,oracle版本都要能够对应。<比较困难>
2. 自己编译,调试。<坑比较多>
如下步骤实测可行:
1. 必须安装oracle的Instant Client。
搜索,注册oracle账户,然后才可以下载。一般下载对应winows 64或者32位版本的最新版本即可。
注意:需要下在Base和SDK 两个包。 两个zip文件,解压后放到某个目录下即可。
Base包里边是一些动态库等可执行程序。
SDK包里边有inc,lib 目录分别对应编译要用的头文件和lib库。
据说,如果有Oracle client光盘可以直接安装搞定,我没有这个条件。
2. QT环境准备。
如果默认在安装QT的时候没有选择源代码,无法编译。
在QT官网下载在线安装包,然后输入账户,选择相应版本,勾选对应编译器(个人选项msvc2015),以及源代码选项。我个人安装了最新的QT5.11.2 (2018年9月28)。
在线安装的QT系统个头比较大,但是内置的MaintenanceTool.exe 还是比较方便后期维护的。
2. 修改工程配置,并编译
找到oci代码工程所在的目录,例如:D:\Qt2\5.11.2\Src\qtbase\src\plugins\sqldrivers\oci
用qt creator打开,然后修改pro工程文件:
用msvc编译的话,去掉原有的 QMAKE_USE += oci
增加 oracle头文件路径,库路径,以及 QMAKE_LFLAGS 为对应的oci.lib文件。
例如:我的oracle client 文件在D:\orcale\instantclient_18_3\sdk。
注意: QT中路径要用 / 而不是 windows的 \ 。
接下来编译成功。 注意这个工程的输出在你QT系统所在磁盘的 更目录下。 例如: 我的直接在D:\根目录下生成了一个 plugins/sqldrivers 目录。
3. 驱动库的使用
把编译出来的文件中,qsqloci.dll, qsqlocid.dll 两个文件复制到QT安装系统的对应目录下即可,例如:D:\Qt2\5.11.2\msvc2015_64\plugins\sqldrivers
注意:QT的QOCI 数据库驱动,还依赖 oracle 的 oci.dll 文件。 在第一步中Instant Client的目录下可以找到。需要把 oci.dll 所在的目录加到系统的path路径。不能简单复制一份到你应用程序exe的工作目录下,否则会出现另外一个异常:QOCIDriver: unable to create
例如: 我在debug工程下的目录是 D:\Qt2\_projects\PM\build-PackageMeasureGUI-Desktop_Qt_5_11_2_MSVC2015_64bit-Debug
3. 软件的部署与发布
软件发布,部署的时候,需要复制oci.dll 到与exe同级目录下。驱动一起放在 exe 同级下的/sqldrivers目录下。
注意程序源代码要增加: QApplication::addLibraryPath("./plugins"); 让qt启用插件目录,例如上边的sqldrivers目录下各种驱动。
4. 测试/调试
源码中可以采用类似如下代码来判定oci驱动是否真正加载成功。
db = QSqlDatabase::addDatabase(“QOCI”);
qDebug() << "QT DB driver?" << db.isValid();
编译好的dll,可以直接下载:
https://download.csdn.net/download/gaochaoran/10694471