Qt + VS编译oracle驱动库流程如下所示:
1、打开需要编译的库的版本,打开对应的qmake,如下我选择了VS2015、2017 64位
2、修改数据库源码下的qsqldriverbase.pri的文件如下所示:
3、通过WIN+R,打开cmd终端,执行:
qmake -tp vc C:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\oci\oci.pro
执行结束后会在qmake.exe目录下生成项目文件,运行qsqloci.vcxproj
4、配置相关项目属性,将oracle数据库的相关头文件加载到程序中
遇见OCIBindPos2报错,做如下修改。
5、点击运行,即可生成oracle驱动库,将生成的驱动库qsqloci.dll,拷贝至对应的Qt版本目录下,即可。
6、Qt 链接测试程序如下所示,弹窗显示Oracle conncet success,则驱动编译成功:
#include "testorcel.h"
#include <QStringList>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlDatabase>
#include <QMessageBox>
#include <QDebug>
testOrcel::testOrcel(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
//查看所有数据库驱动
QStringList lists = QSqlDatabase::drivers();
for (int i = 0; i < lists.size(); ++i) {
qDebug() << lists.at(i);
}
//载入oracle驱动,打开本地数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
db.setHostName("127.0.0.1");//如果连接远程数据库,就把IP换成对方的,并且远程防火墙是关闭的
db.setPort(1521);//端口号
db.setUserName("scott");//用户
db.setPassword("Sys123456");//口令
db.setDatabaseName(tr("mytestdb"));//数据库名
if (!db2.open()) {
QMessageBox::warning(this, tr("info"), QString::fromLocal8Bit("Oracle conncet error =%1").arg(db.lastError().text()));
return;
}
else {
QMessageBox::information(this, tr("info"), tr("Oracle conncet success"));
}
}
testOrcel::~testOrcel()
{
}