用Qt开发Oracle程序时,常会遇到QOCI驱动问题,主要表现为程序运行时出现下面的错误。
QOCI driver not loaded
available drivers: QSQLITE QODBC3 QODBC
这说明没有安装Qt支持Oracle的驱动。
默认情况下Qt只有Sqlite和ODBC驱动,网上有相应的驱动编译安装介绍,经作者验证可行。
提前准备: 编译oracle驱动前先要安装oracle client端软件 软件包名win32_11gR2_client.zip 在oracle官方网站上有该客户端的软件包,也可在其他网站上下载。
QT环境:Qt 5.2.1 (mingw48_32)
作者将软件都安装在D盘目录下
QT安装目录: D:\Qt\Qt5.2.1
oracle客户端安装目录: D:\app
在开始菜单栏里找到Qt5.2.1 在MinGW4.8(32-bit)菜单里点击 ===> Qt 5.2.1 for Desktop(MinGW 4.8 32 bit) 的dos终端
分别执行以下命令,以编译Oracle驱动:
1: set INCLUDE=%INCLUDE%;D:\app\Administrator\product\11.2.0\client_1\oci\include; D:\Qt\Qt5.2.1\Tools\mingw48_32\include
2: set LIB=%lib%;D:\app\Administrator\product\11.2.0\client_1\oci\lib\msvc
3: cd D:\Qt\Qt5.2.1\5.2.1\Src\qtbase\src\plugins\sqldrivers\oci
qmake oci.pro
mingw32-make
其中,;D:\app\Administrator\product\11.2.0\client_1\oci\include为Oracle OCI驱动源码所在目录,D:\Qt\Qt5.2.1\Tools\mingw48_32\include 为编译环境的位置。
执行完以上语句,在D:\Qt\Qt5.2.1\5.2.1\Src\qtbase\plugins\sqldrivers 目录下会生成 libqsqloci.a、libqsqlocid.a、qsqloci.dll、qsqlocid.dll 四个文件,
把它们copy到D:\Qt\Qt5.2.1\5.2.1\mingw48_32\plugins\sqldrivers目录中即可。
编译的过程如下图:
在程序中测试:
#include
#include
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug()<<”Available drivers:”;
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() <<”/t” << driver;
return a.exec();
}
就可以看到目前已经有的驱动列表: