QT连接oracle数据库驱动编译方法(Win10+QT5.13+VS2015+Oracle11g)

最近几天遇到课题,需要用QT连接oracle数据库,CSDN上关于这个问题的方法有很多,也有许多编译好的动态库下载。折腾了几天,总是连接不成功。没有办法,只能多多翻看文章,终于搞了出来。不得不说,这里面的坑确实不少~

先说环境:

  • Win10-64bit

  • QT5.13编译器vs2015-64bit

  • oracle 11r2,64位

目标是编译出qsqloci.dll和qsqlocid.dll这两个文件,拷贝到C:\Qt\Qt5.13.0\5.13.0\msvc2015_64\plugins\sqldrivers目录下即可。VS2015下新建一个QT工程,简单测试一下连接数据库,工程中加入sql,再写几条简单的语句连接数据库(当然你的数据库先要配置好)。QT连接oracle数据库驱动编译方法(Win10+QT5.13+VS2015+Oracle11g)_第1张图片

#include "testDB.h"

#include
#include
#include
#include


testDB::testDB(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);

	QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
	db.setHostName("localhost");
	db.setDatabaseName("orcl");
	db.setUserName("system");
	db.setPassword("orcl");
	db.setPort(1521);
	if (db.open())
	{
		printf("打开成功/n");
	}
	else
	{
		qDebug() << db.lastError();
	}
		



}

在程序输出中(要先打开控制台) 从网上找到的qsqloci.dll和qsqlocid.dll也能加载,总是提示QOCI driver not loaded,而后面available driver中又有QOCI,真是郁闷!看来还是有问题,只好多翻翻文章找原因。

多方查找之后,感觉还是和QOCI驱动有关,现成的驱动不见得适合自己的环境,因此决定自己编译~

在C:\Qt\Qt5.13.0\5.13.0\Src\qtbase\src\plugins\sqldrivers\oci找到工程,根据网上找到的方法,修改oci.pro文件如下

TARGET = qsqloci

HEADERS += $$PWD/qsql_oci_p.h
SOURCES += $$PWD/qsql_oci.cpp $$PWD/main.cpp

#QMAKE_USE += oci
#QMAKE_LFLAGS +=D:/oracle/product/11.2.0/client_1/BIN/oci.dll

#QMAKE_LFLAGS +=D:/oracle/product/11.2.0/client_1/oci/lib/msvc/oci.lib
#INCLUDEPATH  += D:/oracle/product/11.2.0/client_1/oci/include
#LIBPATH += D:/oracle/product/11.2.0/client_1/oci/lib/MSVC


QMAKE_LFLAGS +=D:/oracle/product/11.2.0/dbhome_1/OCI/lib/MSVC/oci.lib
INCLUDEPATH  += D:/oracle/product/11.2.0/dbhome_1/OCI/include
LIBPATH += D:/oracle/product/11.2.0/client_1/OCI/lib/MSVC




darwin:QMAKE_LFLAGS += -Wl,-flat_namespace,-U,_environ

OTHER_FILES += oci.json

PLUGIN_CLASS_NAME = QOCIDriverPlugin
include(../qsqldriverbase.pri)

从上面的文件中看,主要工作就是添加oci.lib,但是添加那个呢?因为我的oracle装了client,网上说不加这个不能访问数据库,我也没有验证,更坑的是这个client是32位的,编译总是有错。后来改成添加64位的oci.lib,编译成功,连接数据库也OK。回想起网上的兄弟们说过的oracle、编译器版本一定要对应,真是真理。

现把我编译好的动态库放上去,如有和我环境一样的可以直接试试,如果不行还是要自己编译一下。

 

 

 

你可能感兴趣的:(QT连接oracle数据库驱动编译方法(Win10+QT5.13+VS2015+Oracle11g))