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:oracleproduct10.2.0db_1OCIinclude;C:QtQt5.3.2ToolsMinGWinclude
set LIB=%lib%;C:oracleproduct10.2.0db_1OCIlibMSVC
cd C:QtQt5.3.25.3.2Srcqtbasesrcpluginssqldriversoci
qmake oci.pro
mingw32-make

  

其中,C:oracleproduct10.2.0db_1OCIinclude为Oracle OCI驱动源码所在目录,D:/QT/mingw/include为编译环境的位置。

执行完以上语句,就会生成libqsqloci.a、libqsqlocid.a、qsqloci.dll、qsqlocid.dll四个文件,把它们copy到C:QtQt5.0.25.0.2mingw47_32pluginssqldrivers目录中即可。
在程序中测试:

#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();
}
原文地址:https://www.cnblogs.com/davygeek/p/5659945.html