龙空技术网

QT 5.12.11 编译 oracle 11 驱动(详细图文教程02)

alantop 110

前言:

当前小伙伴们对“qtpodbcoracle”大概比较讲究,兄弟们都想要分析一些“qtpodbcoracle”的相关内容。那么小编在网络上网罗了一些对于“qtpodbcoracle””的相关文章,希望同学们能喜欢,兄弟们快快来学习一下吧!

注意点:

这里以64位为例子,oracle 11的版本和编译驱动的编译器都选择64位。如果你要32位驱动做对应的选择。

安装oracle 11客户端完整版本

安装QT,组件的选择如下:修改项目工程文件,编译代码

修改oci.pro文件

文件路径 D:\alantop_sde\Qt\5.12.5\Src\qtbase\src\plugins\sqldrivers\oci

文件名 oci.pro

如下图部分修改:

注释掉一行,增加三行#QMAKE_USE += ociQMAKE_LFLAGS += D:/oracle11g/product/11.2.0/client_1\BIN/oci.dllINCLUDEPATH += D:/oracle11g/product/11.2.0/client_1/oci/includeLIBPATH += D:/oracle11g/product/11.2.0/client_1/oci/lib/msvc

修改qsqldriverbase.pri 注释如下行

编译时出现错误,代码部分的修改

修改2个地方 修改源码 qsql_oci.cpp 1559行

1. 修改函数名称 OCIBindByPos2改为OCIBindByPos

2. 把bindColum.lengths 变量做指针转换 reinterpret_cast<ub2*>(bindColumn.lengths),

编译会出现如下警告,不影响生成的dll文件。

修改后编译后,在 D:\plugins\sqldrivers 目录下生成如下驱动文件把qt oracle oci库 拷贝到指定目录下

把oci.dll,oci.lib添加到QT bin目录下(如:D:\alantop_dir\alantop_ide\Qt\Qt5.12.9\5.12.9\mingw73_64\bin),(如果不够把oci.dll下所有文件拷贝到这里)

把上图生成的4个文件拷贝sqldrivers目录下(如:D:\alantop_dir\alantop_ide\Qt\Qt5.12.9\5.12.9\mingw73_64\plugins\sqldrivers)

上图的四个文件拷贝到你写的项目目录下和exe一起。

使用oracle驱动

在pro文件增加如下行

QT += sql

测试代码如下

#include <QCoreApplication>#include <QSqlDatabase>#include <QtGlobal>#include <QtDebug>#include <QSqlError>#include <QSqlQuery>#include <QSqlRecord>#include <QSqlField>int main(){      qDebug()<<"Available drivers:";      QStringList drivers=QSqlDatabase::drivers();      foreach(QString driver,drivers)      qDebug()<<driver;      QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");      qDebug() << "QT DB driver?" << db.isValid();      bool    m_bIsConn;      db.setHostName("10.2.3.102");      db.setPort(1521);      db.setDatabaseName("");      db.setUserName("");      db.setPassword("");      if(db.open())          {               qDebug()<<QString("连接成功");               m_bIsConn = true;          }      else          {               qDebug()<<"连接失败";               m_bIsConn = false;               qDebug()<<db.lastError();          }    QSqlQuery query("SELECT * FROM tables");      while (query.next())          {              int iProNo = query.value(0).toInt();              QString sProName = query.value(1).toString();              qDebug()<< sProName;          }      if(m_bIsConn)          {              QSqlQuery query;              bool bSuccess = query.exec("select * from tables");              if(bSuccess)                  {                      QSqlRecord rec = query.record();                    qDebug()<<("TableName的字段个数:")<<rec.count();                      QSqlField filed = rec.field(0);                    qDebug()<<("字段名称:")<<rec.field(0).name()<<("字段类型:")<<rec.field(0).type()<<("字段值:")<<rec.field(0).value();                    qDebug()<<("段名称:")<<rec.field(1).name()<<("字段类型:")<<rec.field(1).type()<<("字段值:")<<rec.field(1).value();                    qDebug()<<("字段名称:")<<rec.field(2).name()<<("字段类型:")<<rec.field(2).type()<<("字段值:")<<rec.field(2).value();                    qDebug()<<("字段名称:")<<rec.field(3).name()<<("字段类型:")<<rec.field(3).type()<<("字段值:")<<rec.field(3).value();                  }              else                  {                    //qDebug()<<tr("error");                  }          }  }

标签: #qtpodbcoracle #java oracle驱动 #oracle编译视图 #oracle11驱动安装 #oracle11g驱动