因为版权问题,Qt本身不自带Oracle数据库的驱动,因此如果想要借用Qt操作Oracle数据库,需要手动进行编译。
Oracle11g客户端安装配置_行孤、的博客-CSDN博客_oracle11g客户端安装步骤
【Qt】下载与安装_华开发的博客-CSDN博客_qt下载安装
安装组件时勾选 SOURCE 项
本机QT 安装目录:D:\QT\QT_5.9
ORACLE客户端 目录 :F:\oracle_client
QTCreator 打开QT源码 oci.pro 目录:D:\QT\QT_5.9\5.9.9\Src\qtbase\src\plugins\sqldrivers\oci
QT构建分为mingw 和 msvc 构建时oci.pro修改不同,根据个人配置选择
Qt5.8以上版本编译Oracle数据库的OCI驱动教程 | OCI
修改oci.pro
TARGET = qsqloci
HEADERS += $$PWD/qsql_oci_p.h
SOURCES += $$PWD/qsql_oci.cpp $$PWD/main.cpp
#屏蔽
#QMAKE_USE += oci
darwin:QMAKE_LFLAGS += -Wl,-flat_namespace,-U,_environ
OTHER_FILES += oci.json
INCLUDEPATH += F:\oracle_client\oci\include #本机oracle客户端目录
LIBS += F:\oracle_client\oci\lib\msvc\oci.lib #根据个人安装路径调整
PLUGIN_CLASS_NAME = QOCIDriverPlugin
include(../qsqldriverbase.pri)
或
TARGET = qsqloci
HEADERS += $$PWD/qsql_oci_p.h
SOURCES += $$PWD/qsql_oci.cpp $$PWD/main.cpp
#QMAKE_USE += oci
QMAKE_LFLAGS +=F:\oracle_client\BIN\oci.dll
darwin:QMAKE_LFLAGS += -Wl,-flat_namespace,-U,_environ
OTHER_FILES += oci.json
INCLUDEPATH += F:\oracle_client\oci\include
LIBPATH += F:\oracle_client\oci\lib\msvc
PLUGIN_CLASS_NAME = QOCIDriverPlugin
include(../qsqldriverbase.pri)
点击重新构建项目
成功后在本机D:\plugins\sqldrivers下会获得
qsqloci.dll ,qsqlocid.dll ,libqsqloci.a和libqsqlocid.a 4个文件
根据构建套件不同将文件放置不同位置
msvc : D:\QT\QT_5.9\5.9.9\mingw53_32\plugins\sqldrivers
修改oci.pro
TARGET = qsqloci
HEADERS += $$PWD/qsql_oci_p.h
SOURCES += $$PWD/qsql_oci.cpp $$PWD/main.cpp
QMAKE_LFLAGS += oci.lib
darwin:QMAKE_LFLAGS += -Wl,-flat_namespace,-U,_environ
OTHER_FILES += oci.json
INCLUDEPATH += F:\oracle_client\oci\include
LIBPATH += F:\oracle_client\oci\lib\msvc
PLUGIN_CLASS_NAME = QOCIDriverPlugin
include(../qsqldriverbase.pri)
点击重新构建项目
成功后在本机D:\plugins\sqldrivers下会获得
qsqloci.dll ,qsqlocid.dll ,qsqloci.lib和qsqlocid.lib 4个文件
根据构建套件不同将文件放置不同位置
msvc : D:\QT\QT_5.9\5.9.9\msvc2015\plugins\sqldrivers
pro文件中添加
QT += sql
使用头文件中添加
#include
#include
#include
显示可用驱动
//查看所有数据库驱动
QStringList lists = QSqlDatabase::drivers();
for(int i = 0 ;i < lists.size(); ++ i)
{
qDebug() << lists.at(i);
}
测试
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//载入oracle驱动,打开本地数据库
QSqlDatabase db2=QSqlDatabase::addDatabase("QOCI");
db2.setHostName("");//如果连接远程数据库,就把IP换成对方的,并且远程防火墙是关闭的
db2.setPort(1521);
db2.setUserName("");//这个用户是默认的,如何打开这个用户,自己百度
db2.setPassword("");//这个是我的口令
db2.setDatabaseName("");
if(!db2.open())
{
qDebug() <<"error_Oracle:\n" << db2.lastError().text();
}
else
{
//QMessageBox::information(this, tr("提示"), tr("Oracle数据库连接成功!"));
qDebug() <<"true_Oracle:\n" ;
}
return a.exec();
}