Qt 5.11使用OCI连接Oracle 11g完全教程

因某项目需求,笔者将开发一个操作Oracle的Demo,经权衡后选择OCI用于连接Oracle。网络上存在大量Qt与OCI相关教程,但教程绝大多数步骤不清晰,方法不全面,无法有效的、快速的完成Qt使用OCI连接Oracle。故笔者从安装Oracle Client开始到Demo连接Oracle成功,每一步完全记录,以方便读者参考。

Oracle 调用接口 (OCI) 是最全面、性能最高、基于原生“C”语言的 Oracle 数据库接口,它可以提供 Oracle 数据库的全部功能——Oracle官网介绍

本文涉及环境如下:
操作系统Windows 7 SP1 x64,QT 5.11.2,编译器Qt 5.11.2 for Desktop (MinGW 5.3.0 32 bit)。

1编译OCI驱动

1.1安装Oracle Client

笔者所安装的是Oracle Client 11g 32Bit,安装类型选择管理员,详细如下图所示:

后续安装过程不再赘述。

1.2修改qsql_oci.cpp内容

由于Oracle更新的问题,导致QT提供qsql_oci.cpp中代码无法正常使用,需要修改qsql_oci.cpp文件第1559行附近内容。原始内容如下所示:

修改为如下内容:

r = OCIBindByPos(
d->sql, &bindColumn.bindh, d->err, i + 1,
bindColumn.data,
bindColumn.maxLen,
bindColumn.bindAs,
bindColumn.indicators,
reinterpret_cast<ub2*>(bindColumn.lengths),
0,
arrayBind ? bindColumn.maxarr_len : 0,
arrayBind ? &bindColumn.curelep : 0,
OCI_DEFAULT);

1.3编译OCI

启动Qt 5.11.2 for Desktop (MinGW 5.3.0 32 bit),执行如下命令:
cd C:\Qt\Qt5.11.2\5.11.2\Src\qtbase\src\plugins\sqldrivers
qmake — OCI_INCDIR=D:\app\yaozhengwei\product\11.2.0\client_1\oci\include OCI_LIBDIR=D:\app\ yaozhengwei \product\11.2.0\client_1\oci\lib\msvc
其中OCI_INCDIR指Oracle OCI Include目录,OCI_LIBDIR指Oracle OCI Lib目录,通常这两个目录位于Oracle Client安装目录下。

等待Qmake执行完成,过程如下图所示:

继续执行如下命令:
cd oci
nmake
编译输出的dll位于C:\Qt\Qt5.11.2\5.11.2\Src\qtbase\src\plugins\sqldrivers\plugins\sqldrivers

1.4复制OCI驱动

复制C:\Qt\Qt5.11.2\5.11.2\Src\qtbase\src\plugins\sqldrivers\plugins\sqldrivers中libqsqloci.a、libqsqlocid.a、qsqloci.dll和qsqlocid.dll至C:\Qt\Qt5.11.2\5.11.2\mingw53_32\plugins\sqldrivers下。

同时复制一份libqsqloci.a、libqsqlocid.a、qsqloci.dll和qsqlocid.dl至应用程序根目录\sqldrivers下。

D:\app\username\product\11.2.0\client_1\BIN\oci.dll和oraociei11.dll至应用程序根目录下(调试时亦要使用)。

2使用OCI

2.1配置工程文件

编辑工程pro文件,增加QT += sql,配置完成后如下图所示:

2.2设置QsqlDatabase对象

QSqlDatabase _db = QSqlDatabase::addDatabase("QOCI",QUuid::createUuid().toString());
_db.setHostName(_dbHost);
_db.setPort(_dbPort);
_db.setUserName(_dbUser);
_db.setPassword(_dbPwd);
_db.setDatabaseName(_dbName);

2.3尝试连接数据库

_db.open()

笔者尝试打开数据库时提示Unable to logon错误。经检查数据库系统本身正常(PLSQL可正常连接),数据库连接参数正常。经查验,问题原因为未复制oraociei11.dll至应用程序根目录。

原创文章,转载请注明: 转载自墨意杂记

本文链接地址: Qt 5.11使用OCI连接Oracle 11g完全教程