Qt5.15编译Oracle 19c数据库驱动

 

一、下载Oracle 19c驱动,需要下载两个包,注意分x86和x64

  x86下载地址:Instant Client for Windows 32-bit (oracle.com)

 ① instantclient-basic-nt-19.18.0.0.0dbru.zip

 ② instantclient-sdk-nt-19.18.0.0.0dbru.zip

  x64下载地址:Instant Client for Microsoft Windows (x64) 64-bit (oracle.com)

  ① instantclient-basic-windows.x64-19.18.0.0.0dbru.zip

  ② instantclient-sdk-windows.x64-19.18.0.0.0dbru.zip

 

  上述是我选择的版本,可根据需要下载所需版本。

 

二、在桌面新建Oracle 19c目录

  ①  在目录下分别新建x86文件夹,将下载的x86驱动包解压到该目录。

  

  ②  在目录下分别新建x64文件夹,将下载的x64驱动包解压到该目录。

       

 

 

三、配置驱动编译信息

① 打开去边编译工程

 路径:C:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\oci

② 编辑程序信息,做如下修改

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

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

#x86
#INCLUDEPATH += C:/Users/WJY/Desktop/Oracle_19c/x86/instantclient_19_18/sdk/include
#LIBS += -LC:/Users/WJY/Desktop/Oracle_19c/x86/instantclient_19_18/sdk/lib/msvc -loci

#x64
INCLUDEPATH += C:/Users/WJY/Desktop/Oracle_19c/Driver/x64/instantclient_19_18/sdk/include
LIBS += -LC:/Users/WJY/Desktop/Oracle_19c/Driver/x64/instantclient_19_18/sdk/lib/msvc -loci

③ 点击编译即可,文件默认生成在C盘根目录,拷贝到Qt编译器目录即可,这里就不细说了。

 

四、配置Qt项目

① 整理Oracle客户端运行所依赖的相关DLL文件,即前边解压的Oracle Instant Client包,注意区分x86和x64,建议分别放置以免混淆。

 

② Oracle连接代码

void MainWindow::test(){

    QSqlDatabase  db;

    if(QSqlDatabase::contains("Oracle_19c")){
          db = QSqlDatabase::database("Oracle_19c");
    }else{
          db = QSqlDatabase::addDatabase("QOCI","Oracle_19c");
    }
        db.setHostName("192.168.100.12");
        db.setDatabaseName("ORCL");//安装时全局数据库名
        db.setUserName("system");
        db.setPassword("@Hwjy");
        db.setPort(1521);

        if(db.open()){
            qDebug()<<"数据库连接成功";
            ui->textEdit->append("数据库连接成功");

        }else{
            qDebug()<<"数据库连接失败";
            ui->textEdit->append("数据库连接失败");
            qDebug()<<db.lastError().text();
            ui->textEdit->append(db.lastError().text());

        }

        if(db.isOpen()){

            db.close();

        }
}

 

 ③ 编写Oracle Instant Client 相关DLL加载代码

void MainWindow::load_oci(){

    QString path = QCoreApplication::applicationDirPath();
            path.append("/instantclient_19_18/oci.dll");

    QLibrary dll;

    dll.setFileName(path);

    if(!dll.isLoaded()){
        dll.load();
        qDebug()<<"已加载Oracle instantclient_19_18";
    }

}

 

④ 将前边整理好的Oracle Instant Client DLL包,拷贝到程序运行目录即可,注意区分x86和x64。

 

posted @ 2023-04-06 21:53  hiwjy  阅读(764)  评论(0)    收藏  举报