国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng)

這篇具有很好參考價(jià)值的文章主要介紹了QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

0、背景

在使用QT開(kāi)發(fā)應(yīng)用的過(guò)程中,往往會(huì)把應(yīng)用使用過(guò)程中產(chǎn)生的數(shù)據(jù)放入數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)一存儲(chǔ),因此通過(guò)QT實(shí)現(xiàn)數(shù)據(jù)庫(kù)的訪問(wèn)可以說(shuō)是必須的一個(gè)知識(shí)點(diǎn),其實(shí)QT訪問(wèn)數(shù)據(jù)庫(kù)的語(yǔ)法及相關(guān)類(lèi)和方法的使用并不復(fù)雜,但是對(duì)于使用QT的新人來(lái)說(shuō)往往會(huì)開(kāi)在數(shù)據(jù)庫(kù)驅(qū)動(dòng)加載的地方,比如遇到以下問(wèn)題:

QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMARIADB QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

雖然QT的驅(qū)動(dòng)列表中有QPSQL,但是確保不能加載。下面就來(lái)說(shuō)一下正確使用QT方法數(shù)據(jù)的驅(qū)動(dòng)問(wèn)題。

QT最新的安裝包安裝完畢后,默認(rèn)支持ODBC和SQLITE數(shù)據(jù)庫(kù),要想使用其他的數(shù)據(jù)庫(kù)那么你在安裝QT的時(shí)候要把源碼選項(xiàng)勾上。

1、環(huán)境以及條件說(shuō)明

操作系統(tǒng):windows10專(zhuān)業(yè)版
數(shù)據(jù)庫(kù)服務(wù)器版本:oracle 11.2 g
oracle instant client版本:19.19.0.0.0
QT版本:5.15.2,且安裝的時(shí)候勾選了源碼
QT安裝目錄:D:\Qt
QT編譯套件1:MinGW64(關(guān)于32位位與64位問(wèn)題要與數(shù)據(jù)庫(kù)一致)
QT編譯套件2:MSVC2019_64(不同的編譯套件默認(rèn)內(nèi)置的數(shù)據(jù)庫(kù)驅(qū)動(dòng)是不一樣的,具體看套件的plugins/sqldrivers/目錄下的庫(kù)文件)

2、編譯驅(qū)動(dòng)

2.1 下載oracle instant client

1、首先要下載oracleclient,因?yàn)樵诰幾goci驅(qū)動(dòng)時(shí)要依賴oracleclient中的庫(kù)和頭文件。下載地址為:
https://www.oracle.com/database/technologies/instant-client/downloads.html
如下圖:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記
Oracle Instant Client的下載要根據(jù)操作系統(tǒng)版本和Oracle服務(wù)器版本匹配才行。我開(kāi)發(fā)環(huán)境是Windows10 64位系統(tǒng),因此選擇的是Instant Client for Microsoft Windows (x64)

2、點(diǎn)擊后會(huì)出現(xiàn)Oracle Instant Client版本選擇,如下圖:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記
不同的Oracle Instant Client版本支持的Oracle服務(wù)器的版本也不相同,我用的Oracle服務(wù)器版本是11.2,這里選擇的版本是Version 19.xx.x.x.x,我之前下載的是19.19,現(xiàn)在截圖的時(shí)候已經(jīng)是19.20,差別不大。
3、點(diǎn)開(kāi)后可以看到有BasicPackage、SQL*Plus Package、Tools Package、SDK Package、JDBC Supplement Package、ODBC Package等包的下載,如下圖:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記

編譯oci,需要至少2個(gè)包,就是Baisc Package、SDK Package

4、下載后如下圖:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記
然后解壓basic和sdk這2個(gè)壓縮包。
5、我這個(gè)把解壓后的文件夾復(fù)制到D盤(pán)了,復(fù)制不復(fù)制可以根據(jù)實(shí)際情況定。如下圖:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記

2.2 編譯qt oci驅(qū)動(dòng)

2.2.1 修改oci.pro

1、首先找到qt oci項(xiàng)目的源碼,我的源碼(記住安裝QT的時(shí)候一定要勾選源碼)位置如下:
D:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\oci
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記
2、然后用qtcreator打開(kāi)oci.pro,并對(duì)oci.pro的內(nèi)容進(jìn)行修改(修改之前最好先對(duì)oci項(xiàng)目進(jìn)行一下備份),如下:

TARGET = qsqloci

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

#注釋該行
#QMAKE_USE += oci

#根據(jù)Oracle客戶端安裝路徑 指定oci.dll
QMAKE_LFLAGS += D:\oracleinstantclient_19_19\oci.dll

#根據(jù)Oracle客戶端安裝路徑 指定頭文件目錄
INCLUDEPATH += D:\oracleinstantclient_19_19\sdk\include

#根據(jù)Oracle客戶端安裝路徑 指定庫(kù)文件(.lib)路徑
LIBS += -LD:\oracleinstantclient_19_19\sdk\lib\msvc -loci

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

OTHER_FILES += oci.json

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

如下圖:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記

2.2.2 MinGW64構(gòu)建套件編譯

1、在qtcreator設(shè)置項(xiàng)目使用的構(gòu)建套件為MinGW64,如下圖:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記
2、分別進(jìn)行Debug編譯和Release編譯,編譯完畢后出現(xiàn)如下圖:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記
在D:\plugins\sqldrivers目錄生成的libqsqloci.a、qsqloci.dll、qsqloci.dll.debug
3、讓QT的程序能找到編譯好的驅(qū)動(dòng)。
qt工程在編譯是默認(rèn)尋找數(shù)據(jù)庫(kù)驅(qū)動(dòng)的路徑(注意項(xiàng)目使用的編譯套件是MinGw 64位的)是:D:\Qt\5.15.2\mingw81_64\plugins\sqldrivers,因此需要把上一步編譯生成的3個(gè)文件libqsqloci.a、qsqloci.dll、qsqloci.dll.debug復(fù)制到D:\Qt\5.15.2\mingw81_64\plugins\sqldrivers目錄下。如下圖:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記

2.2.3 MSVC2019_64構(gòu)建套件編譯

1、在qtcreator設(shè)置項(xiàng)目使用的構(gòu)建套件為MSVC2019_64,如下圖:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記
這時(shí)切換到代碼編輯會(huì)發(fā)現(xiàn)一個(gè)錯(cuò)誤,內(nèi)容為:Project ERROR: msvc-version loaded but QMAKE_MSC_VER isn’t set,如下圖:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記
為了解決這個(gè)問(wèn)題,我們需要在D:\Qt\5.15.2\msvc2019_64\mkspecs\common\msvc-version.conf中設(shè)置一下QMAKE_MSC_VER的值,如下圖:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記

注意:1919那個(gè)值應(yīng)該是從下面的版本設(shè)置列表中找到才行。

2、然后關(guān)閉qtcreator,重新打開(kāi)qtcreator,并在qtcreator中打開(kāi)oci.pro項(xiàng)目,然后使用MSVC2019_64構(gòu)建套件進(jìn)行編譯,又出現(xiàn)了一個(gè)錯(cuò)誤,內(nèi)容為:LNK1107:文件無(wú)效或損壞:無(wú)法在0x2F8處讀取 - oci.dll,如下圖:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記

在使用MSVC構(gòu)建套件進(jìn)行編譯oci時(shí)不需要在pro中指定oci.dll的路徑

我們需要再修改一下pro文件的內(nèi)容,修改后內(nèi)容如下:

TARGET = qsqloci

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

#注釋該行
#QMAKE_USE += oci

#根據(jù)Oracle客戶端安裝路徑 指定oci.dll
!msvc {
    QMAKE_LFLAGS += D:\oracleinstantclient_19_19\oci.dll
}

#根據(jù)Oracle客戶端安裝路徑 指定頭文件目錄
INCLUDEPATH += D:\oracleinstantclient_19_19\sdk\include

#根據(jù)Oracle客戶端安裝路徑 指定庫(kù)文件(.lib)路徑
LIBS += -LD:\oracleinstantclient_19_19\sdk\lib\msvc -loci

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

OTHER_FILES += oci.json

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

如下圖:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記
這樣修改后,無(wú)論我們使用msvc構(gòu)建套件還是mingw構(gòu)建套件都可以正常編譯過(guò)去了。
3、為了防止msvc構(gòu)建套件編譯生成的庫(kù)文件與mingw構(gòu)建套件編譯生成的庫(kù)文件混淆,我們先把D:\plugins\sqldrivers目錄中的文件刪除,然后通過(guò)msvc構(gòu)建套件編譯oci項(xiàng)目,編譯完畢后生成的庫(kù)文件如下圖:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記
4、讓QT的程序能找到編譯好的驅(qū)動(dòng)。
qt工程在編譯是默認(rèn)尋找數(shù)據(jù)庫(kù)驅(qū)動(dòng)的路徑(注意項(xiàng)目使用的編譯套件是MSVC2019_64位的)是:D:\Qt\5.15.2\msvc2019_64\plugins\sqldrivers,因此需要把上一步編譯生成的3個(gè)文件libqsqloci.a、qsqloci.dll、qsqloci.dll.debug復(fù)制到D:\Qt\5.15.2\msvc2019_64\plugins\sqldrivers目錄下。如下圖:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記

3、訪問(wèn)數(shù)據(jù)庫(kù)運(yùn)行成功

1、需要在代碼中指定引用的oci庫(kù)的路徑

QLibrary *oci_lib = new QLibrary("D:/oracleinstantclient_19_19/oci.dll");
oci_lib->load();
if (!oci_lib->isLoaded())
{
    qDebug() << "oracle oci動(dòng)態(tài)庫(kù)加載失敗!";
    return;
}

2、完整測(cè)試代碼如下:

#ifdef Q_OS_WIN
    QLibrary *oci_lib = new QLibrary("D:/oracleinstantclient_19_19/oci.dll");
    oci_lib->load();
    if (!oci_lib->isLoaded())
    {
        qDebug() << "oracle oci動(dòng)態(tài)庫(kù)加載失敗!";
        return;
    }
#else
//    QLibrary *oci_lib = new QLibrary("/usr/lib/oracleclient/instantclient_19_19/libclntsh.so");
//    bool loadresult = oci_lib->load();
//    qDebug() << "oracle oci動(dòng)態(tài)庫(kù)load result is " << loadresult;
//    if (!loadresult)
//    {
//        qDebug() << oci_lib->errorString();
//    }
//    if (!oci_lib->isLoaded())
//    {
//        qDebug() << "oracle oci動(dòng)態(tài)庫(kù)libclntsh.so加載失敗!";
//        return;
//    }
#endif
    QStringList driverList = QSqlDatabase::drivers();
    qDebug() << driverList;

    //以下代碼測(cè)試訪問(wèn)Oracle數(shù)據(jù)庫(kù)
    QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
    db.setHostName("172.16.12.6");
    db.setPort(1521);
    db.setDatabaseName("orcl");
    db.setUserName("mes");
    db.setPassword("oracle");

    if (!db.open())
    {
        qDebug() << "數(shù)據(jù)庫(kù)連接失敗!";
    }
    else
    {
        qDebug() << "數(shù)據(jù)庫(kù)連接成功!";
    }

3、運(yùn)行結(jié)果如下:
QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng),qt,qt,學(xué)習(xí),筆記文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-650049.html

到了這里,關(guān)于QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • QT學(xué)習(xí)筆記-QT5.15編譯及安裝谷歌拼音輸入法(QtInputMethod_GooglePinyin)

    QT學(xué)習(xí)筆記-QT5.15編譯及安裝谷歌拼音輸入法(QtInputMethod_GooglePinyin)

    在使用QT進(jìn)行嵌入式應(yīng)用開(kāi)發(fā)時(shí),往往程序最終的運(yùn)行設(shè)備是有觸屏的設(shè)備。因此,不可避免的會(huì)遇到虛擬鍵盤(pán)和中文輸入的問(wèn)題。QT自帶一個(gè)虛擬鍵盤(pán),可以在構(gòu)建套件/plugins/platforminputcontexts目錄下看到2個(gè)文件: qtvirtualkeyboardplugin.dll qtvirtualkeyboardplugin.dll.debug QT自帶的虛擬鍵

    2024年02月12日
    瀏覽(38)
  • QT mysql 驅(qū)動(dòng)-數(shù)據(jù)庫(kù)安裝以及qt連接ssl報(bào)錯(cuò)問(wèn)題

    QT mysql 驅(qū)動(dòng)-數(shù)據(jù)庫(kù)安裝以及qt連接ssl報(bào)錯(cuò)問(wèn)題

    文章末尾是引用筆記 配置MySQL8.0 環(huán)境變量 如果不配置MySQL環(huán)境變量,就不能在命令行直接輸入MySQL登錄命令。下面說(shuō)如何配置MySQL的環(huán)境變量: 步驟1:在桌面上右擊【此電腦】圖標(biāo),在彈出的快捷菜單中選擇【屬性】菜單命令。 步驟2:打開(kāi)【系統(tǒng)】窗口,單擊【高級(jí)系統(tǒng)設(shè)

    2024年01月20日
    瀏覽(27)
  • Ubuntu 22.04 編譯安裝 Qt mysql驅(qū)動(dòng)

    Ubuntu 22.04 編譯安裝 Qt mysql驅(qū)動(dòng)

    參考自 Ubuntu20.04.3 QT5.15.2 MySQL驅(qū)動(dòng)編譯 Ubuntu 18.04 編譯安裝 Qt mysql驅(qū)動(dòng) 下邊這篇博客不是主要參考的, 但是似乎解決了我的難題(找不到 libmysqlclient.so ) ubuntu18.04.2 LTS 系統(tǒng)關(guān)于Qt5.12.3 無(wú)法加載mysql驅(qū)動(dòng),需要重新編譯MYSQL數(shù)據(jù)庫(kù)驅(qū)動(dòng)的問(wèn)題以及解決方案 系統(tǒng)版本 MySQL 肯定要先安

    2024年01月16日
    瀏覽(27)
  • QT筆記——QT類(lèi)反射機(jī)制簡(jiǎn)單學(xué)習(xí)

    QT筆記——QT類(lèi)反射機(jī)制簡(jiǎn)單學(xué)習(xí)

    學(xué)習(xí) QT的 類(lèi)反射機(jī)制 使用Qt 反射機(jī)制的條件 1.需要繼承自QObject 類(lèi) 或者 它的 派生類(lèi) ,并需要在類(lèi)中加入Q_OBJECT 宏 2.注冊(cè)成員函數(shù):若希望普通成員函數(shù)能夠被反射,需要在函數(shù)聲明之前加入Q_INVOKABLE 宏。 3.注冊(cè)成員變量:若希望成員變量能被反射,需要使用Q_PROPERTY 宏。

    2024年02月09日
    瀏覽(26)
  • Qt學(xué)習(xí)筆記5---如何在Qt中添加資源文件

    Qt學(xué)習(xí)筆記5---如何在Qt中添加資源文件

    ? ? ? ? ? 前言: 在我們給Qt加上圖片的時(shí)候,可以用本地資源添加的方式,但是此方法代碼用的只能是本地資源,不好共享。那么我們可以把資源文件添加在Qt中,這樣就不會(huì)出現(xiàn)這種問(wèn)題啦! 第一步:在本地復(fù)制你想用的資源文件,點(diǎn)開(kāi)項(xiàng)目的“在Explorer中顯示”,粘貼

    2024年02月16日
    瀏覽(23)
  • 學(xué)習(xí)Qt筆記

    前言: 一、Qt Creator 使用技巧? 二、 Qt的元對(duì)象系統(tǒng) 2.1 Qt的元對(duì)象系統(tǒng)概述 2.1.2 屬性系統(tǒng) ?2.1.3 信號(hào)與槽 ?2.1.4 對(duì)象數(shù) ?2.2? 容器類(lèi) 三、常用界面組件使用 3.1 QString字符串操作 ? ? ? ? 學(xué)習(xí)筆記的內(nèi)容來(lái)自 B站up主 阿西拜編程 《Qt6 C++開(kāi)發(fā)指南 》2023(上冊(cè),完整版)_嗶哩

    2024年01月21日
    瀏覽(13)
  • QT學(xué)習(xí)筆記(持續(xù)更新)

    QT學(xué)習(xí)筆記(持續(xù)更新)

    1.自定義信號(hào): 寫(xiě)在signals下,void,需要聲明,不需要實(shí)現(xiàn),可以有參數(shù),可重載。 2.槽: 寫(xiě)在public下,void,需要聲明,需要實(shí)現(xiàn),可有參數(shù),可發(fā)生重載。 3.斷開(kāi)信號(hào): disconnect 4.emit: 使用emit發(fā)送信號(hào) 5.示例關(guān)鍵代碼如下: 1.widget.cpp 2.widget.h 3.student.cpp 4.teacher.h和st

    2023年04月26日
    瀏覽(41)
  • QT 學(xué)習(xí)筆記(七)

    QT 學(xué)習(xí)筆記(七)

    由于每次代碼都是在原有程序上修改,因此除了新建項(xiàng)目,不然一般會(huì)在學(xué)完后統(tǒng)一展示代碼。 提示:具體項(xiàng)目創(chuàng)建流程和注意事項(xiàng)見(jiàn) QT 學(xué)習(xí)筆記(一) 提示:具體項(xiàng)目準(zhǔn)備工作和細(xì)節(jié)講解見(jiàn) QT 學(xué)習(xí)筆記(二) 生成一個(gè)新的項(xiàng)目,具體步驟過(guò)程見(jiàn)提示。 所謂的 GUI 界面,

    2024年02月08日
    瀏覽(18)
  • Qt開(kāi)發(fā)學(xué)習(xí)筆記02

    Qt開(kāi)發(fā)學(xué)習(xí)筆記02

    重寫(xiě) mousePressEvent 方法 要在Qt中實(shí)現(xiàn)關(guān)機(jī)功能,你需要使用操作系統(tǒng)提供的相關(guān)函數(shù)或命令來(lái)執(zhí)行關(guān)機(jī)操作。由于不同操作系統(tǒng)之間的關(guān)機(jī)方式可能有所不同,下面我將為你提供針對(duì)不同操作系統(tǒng)的示例代碼。 Windows系統(tǒng) 也可使用下面方法 macOS系統(tǒng) 請(qǐng)注意,macOS系統(tǒng)需要使用

    2024年02月04日
    瀏覽(42)
  • QT筆記——QProcess學(xué)習(xí)

    QT筆記——QProcess學(xué)習(xí)

    我們常常想通過(guò)某一個(gè)類(lèi),來(lái)啟動(dòng)一個(gè)外部進(jìn)程 本文將講解如何通過(guò)QProcess來(lái)進(jìn)行啟動(dòng)外部進(jìn)程 一:了解QProcess QProcess是Qt框架提供的一個(gè)類(lèi),用于在應(yīng)用程序中執(zhí)行外部進(jìn)程。它提供了一系列函數(shù)來(lái)啟動(dòng)、控制和與外部進(jìn)程進(jìn)行交互 1.啟動(dòng)進(jìn)程的方式: (1.1)分離式:外部程序

    2024年02月12日
    瀏覽(12)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包