Qt5.12 + VS2015编译oci驱动

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动态库和静态库

地址:https://www.oracle.com/technetwork/topics/winx64soft-089540.html
下载instantclient-sdk-windows.x64-12.2.0.1.0.zip(.lib和头文件)、instantclient-basic-windows.x64-12.2.0.1.0.zip(.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/oci.pro
2)这里我们需要更改一下pro工程文件内容:
将QMAKE_USE +=oci注释掉,在前面加一个#
添加一行 QMAKE_LFLAGS += oci.lib
遇到问题2:“Cannot read C:/qtsqldrivers-config.pri”
没有找到文件,发现xxx/Qt5.12.7/5.12.7/Src/qtbase/src/plugins/sqldrivers有configure.pri.
1)打开qsqldriverbase.priwen文件,注释掉"include($$shadowed($$PWD)/qtsqldrivers-config.pri)"
2)添加include(xxx/Qt5.12.7/5.12.7/Src/qtbase/src/plugins/sqldrivers/configure.pri)
注意:更改完成要保存.

2)使用VS2015编译

按照博主 obervose 进行编译oci驱动.
1)更改属性
右键oci,点击属性.
第一步:更改输出目录
在配置属性==>常规==>输出目录,为$(QTDIR)\plugin\sqldrivers
Qt5.12 + VS2015编译oci驱动_第1张图片
第二步:添加引用头文件
C/C++=>常规=>附加包含目录,添加下载oracle的sdk中头文件.
【(全路径)instantclient12.2.0.1.0\x64\instantclient_12_2\sdk\include】
Qt5.12 + VS2015编译oci驱动_第2张图片

第三步:添加依赖所在文件
在链接器=>常规=>附加目录库,添加【(全路径)\instanclient-sdk-windows.x64-12.2.0.1.0\instantclient_12_2\sdk\lib\msvc
Qt5.12 + VS2015编译oci驱动_第3张图片
第三步:添加库
在链接器=>输入=>附加依赖项,添加oci.lib
Qt5.12 + VS2015编译oci驱动_第4张图片
第四步:编译
虽然更改生成目录,但是没有生效.
编译好的文件在C:\plugins\sqldrivers

使用oci驱动连接Oracle

第一步:VS2015创建Qt工程,必须勾选SQL组件
如果是已生成Qt工程,需要在工程的工具栏,选择Qt VS Tools
=>Qt Project Settings=>Qt Modules 勾选SQL

Qt5.12 + VS2015编译oci驱动_第5张图片

Qt5.12 + VS2015编译oci驱动_第6张图片
第二步:将生成的sqlocid.dll 和sqlocid.lib放到可执行文件的同级目录下(我编译的是debug版本).

第三步:根据博主 obervose 说的,程序在运行时需要将oci.dll、oraons.dll、oraociei12.dll,拷贝到可执行文件的根目录同级目录,程序运行时需要加载这些文件。

第四步:测试

#include 
#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();
}

如果有什么不对的地方,请大家留言指教!

你可能感兴趣的:(QT)