Qt編譯Oracle OCI驅動


最近使用qt開發了一個訪問數據庫的工具, 默認使用ODBC驅動注入的方式,后來發現Oracle中ODBC驅動注入經常失敗。

后來就想直接使用OCI方式訪問,而默認情況下Qt只有Sqlite和ODBC驅動,OCI需要自己編譯安裝; 網上有相應的驅動安裝介紹,自己實驗可行:

編譯前置條件:

1. QT源碼安裝,需要包含src目錄中的源碼

2. Oracle驅動源碼安裝, 需要有OCI驅動源碼,否則無法編譯

環境要求:

QT環境:Qt  5.3.2 /MinGW4.7.2/WIN7 32bit

打開Qt Command Prompt,分別執行以下命令,以編譯Oracle驅動:

set INCLUDE=%include%;C:\oracle\product\10.2.0\db_1\OCI\include;C:\Qt\Qt5.3.2\Tools\MinGW\include
set LIB=%lib%;C:\oracle\product\10.2.0\db_1\OCI\lib\MSVC
cd C:\Qt\Qt5.3.2\5.3.2\Src\qtbase\src\plugins\sqldrivers\oci
qmake oci.pro
mingw32-make

  

其中,C:\oracle\product\10.2.0\db_1\OCI\include為Oracle OCI驅動源碼所在目錄,D:/QT/mingw/include為編譯環境的位置。

執行完以上語句,就會生成libqsqloci.a、libqsqlocid.a、qsqloci.dll、qsqlocid.dll四個文件,把它們copy到C:\Qt\Qt5.0.2\5.0.2\mingw47_32\plugins\sqldrivers目錄中即可。
在程序中測試:

#include <QCoreApplication>
#include <QtSql/QSqlDatabase>
#include <QDebug>
#include <QStringList>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug()<<“Available drivers:”;
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() <<“/t” << driver;
return a.exec();
}

  

可以看到對應的驅動列表:

 

 

驅動沒有問題之后可以使用以下代碼測試下是否可以連通oracle數據庫

#include <QCoreApplication>
#include <QtSql>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
    db.setHostName("MY_IP_OR_HOST_NAME");
    db.setDatabaseName("XE");
    db.setUserName("test");
    db.setPassword("test_password");

    if (!db.open())
    {
        qDebug() << db.lastError().text();
    }
    else{
        qDebug() << "Wow opened";
    }

    return a.exec();
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM