**
利用Qt5.12.10+VS2017 编译Oracle驱动库,解决QOCI driver not load 问题**(亲测可用)
前言:
Qt官网在qt5以后就不再直接提供Oracle和Mysql数据库驱动,需要用户跟据安装的源码,手动编译数据库驱动,在此分享一下自己在编译Oracle驱动库时的心得以及踩过的坑。
一、环境准备
1、安装qt-opensource-windows-x86-5.12.10.exe
百度云盘下载链接:
链接:https://pan.baidu.com/s/13COjY7IOVltrwBf8dYFQEA
提取码:rddg
1)安装流程中,安装插件时需注意勾选上“Source”,为后期编译Oracle动态库做准备
2)在path中添加环境变量配置:
2、安装visual studio 2017(x64)
百度云下载链接(失效了可留言邮箱发送):
链接:https://pan.baidu.com/s/12L97fmvFBXYw6KsqreJYHg
提取码:y7hs
安装教程此处省略,网上帖子很多,再次不多赘述。
环境变量配置:
1)创建变量 VS2017
2)INCLUDE
3)LIB
3、安装数据库客户端oracle 11g R2 Client (x64)
百度云盘下载链接:
链接:https://pan.baidu.com/s/1UFYF8MCVKgZDG0IaA5Rzkg
提取码:85tl
在path中添加环境变量配置:
二、编译动态库
1、通过Qt Creator打开“C:\Qt\Qt5.12.10\5.12.10\Src\qtbase\src\plugins\sqldrivers\oci”文件下的oci.pro,打开oci项目
2、修改orc.pro文件(标红部分)
3、修改qsql_oci.cpp文件,其中1559行。
4、如果以上三个软件安装和环境变量配置正确,将项目coi右键qmake,没有报错后,点击重新构建,一切执行正常,则在qt安装盘的根目录下会新增一个目录,本人是“C:\plugins\sqldrivers”目录下,会产生编译好的dll库,主要是qsqloci.dll和qsqlocid.dll这个两个库
三、测试调用
1、将C:\plugins\sqldrivers目录下的qsqloci.dll和qsqlocid.dll这个两个库拷贝到
“C:\Qt\Qt5.12.10\5.12.10\msvc2017_64\plugins\sqldrivers”目录下(根据自己选择的编译器决定拷贝到哪个位置,本人选择的是msvc2017_64)
2、测试调用
将驱动文件放好之后,新建一个工程,测试一下oracle数据库连接
//连接oracle数据库
QSqlDatabase db = QSqlDatabase::addDatabase(“QOCI”);
db.setPort(1521);
db.setHostName(“name”);
db.setDatabaseName(“ORCL”);
db.setUserName(“uname”);
db.setPassword(“pwd”);
if (!db.open()) {
qDebug()<< db.lastError().text();
}else{
qDebug()<< u8"链接远程数据库成功";
}
四、注意事项:
1、如果嫌编译麻烦,也可直接拷贝作者编译好的驱动库,直接拷贝到对应编译器的drivers目录下,但需注意自己电脑上安装的oracle客户端版本,qt版本,因为本人在此踩过坑(注意版本对应)。
oralce11g_x86+VS2015_x86/VS2017_x86
oralce11g_x64+VS2015_x64/VS2017_x64
动态库链接下载地址(百度云):
链接:https://pan.baidu.com/s/175-mm7eQF84IAvxuAgfzgQ
提取码:ew92
2、在编译时出现U1077 “…/link.exe” ,"…/nmake.exe" …等问题,一般是环境变量和编译器没有设置正确,好好检查一下。
3、在拷贝别人的的驱动库,直接调用时,依然报错
QSqlDatabase: QOCI driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QOCI QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
error_Oracle:
“Driver not loaded Driver not loaded”
明明可用驱动已经有oracle驱动了,但还是报错,驱动找不着,原因很可能是下载的QOCI驱动库跟本地环境不匹配造成的。