QT编译oci驱动
- 环境
- 步骤
- 下载Oracle动态库和静态库
- oci工程编译
- 1)更改oci工程
- 2)使用VS2015编译
- 使用oci驱动连接Oracle
最近做项目需要连接Oracle数据库,查询资料发现需要oci驱动.之前都是再Linux下使用ODBC,现在改为Windows,不熟悉啊.折腾了两天终于可以了.记录一下省的忘了.
非常感谢广大博主的分享,尤其感谢博主 obervose ,在博主obervose基础上添加一些自己解决问题.
环境
win7 64位系统
QT版本是5.12.7,安装时选择了msvc201564位
Visual Studio 2015
步骤
下载Oracle动态库和静态库
地址:/technetwork/topics/
下载instantclient-sdk-windows.x64-12.2.0.1.(.lib和头文件)、instantclient-basic-windows.x64-12.2.0.1.(.dll文件).
因为我使用的oracle服务端安装64位系统,并且vs2015也是64位的,所以没有按照博主 obervose 说的下载32位依赖包.
oci工程编译
1)更改oci工程
遇到问题1:"Project ERROR:Library ‘oci’ is not defined "
1)使用Qt打开oci工程: xxx/Qt5.12.7/5.12.7/Src/qtbase/src/plugins/sqldrivers/oci/
2)这里我们需要更改一下pro工程文件内容:
将QMAKE_USE +=oci注释掉,在前面加一个#
添加一行 QMAKE_LFLAGS +=
遇到问题2:“Cannot read C:/”
没有找到文件,发现xxx/Qt5.12.7/5.12.7/Src/qtbase/src/plugins/sqldrivers有.
1)打开文件,注释掉"include(shadowed(
2)添加include(xxx/Qt5.12.7/5.12.7/Src/qtbase/src/plugins/sqldrivers/)
注意:更改完成要保存.
2)使用VS2015编译
按照博主 obervose 进行编译oci驱动.
1)更改属性
右键oci,点击属性.
第一步:更改输出目录
在配置属性==>常规==>输出目录,为$(QTDIR)\plugin\sqldrivers
第二步:添加引用头文件
C/C++=>常规=>附加包含目录,添加下载oracle的sdk中头文件.
【(全路径)instantclient12.2.0.1.0\x64\instantclient_12_2\sdk\include】
第三步:添加依赖所在文件
在链接器=>常规=>附加目录库,添加【(全路径)\instanclient-sdk-windows.x64-12.2.0.1.0\instantclient_12_2\sdk\lib\msvc
第三步:添加库
在链接器=>输入=>附加依赖项,添加
第四步:编译
虽然更改生成目录,但是没有生效.
编译好的文件在C:\plugins\sqldrivers
使用oci驱动连接Oracle
第一步:VS2015创建Qt工程,必须勾选SQL组件
如果是已生成Qt工程,需要在工程的工具栏,选择Qt VS Tools
=>Qt Project Settings=>Qt Modules 勾选SQL
第二步:将生成的 和放到可执行文件的同级目录下(我编译的是debug版本).
第三步:根据博主 obervose 说的,程序在运行时需要将、、,拷贝到可执行文件的根目录同级目录,程序运行时需要加载这些文件。
第四步:测试
#include <QtCore/QCoreApplication>
#include <>
#include <>
#include <>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
db.setHostName("192.168.85.155");
db.setDatabaseName("test");
db.setUserName("scott");
db.setPassword("123456");
db.setPort(1521);
bool ret = db.open();
if (!ret)
{
qDebug() << QString::fromLocal8Bit("Oracel 数据库未连接") << endl;
qDebug() << db.lastError().text() << endl;
return false;
}
qDebug() << QString::fromLocal8Bit("Oracle数据库连接成功") << endl;
return a.exec();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
如果有什么不对的地方,请大家留言指教!