qt编译oracle驱动,qt 5.12 连接 oracle 数据库示例代码

Posted alantop的笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt编译oracle驱动,qt 5.12 连接 oracle 数据库示例代码相关的知识,希望对你有一定的参考价值。

qt 5.12.5 编译 oracle11g R2 驱动

  1. 下载安装oracle客户端 oracle11g R2 64位

     

  2. 安装qt 5.12

    技术图片

  3. D:alantop_sdeQt5.12.5Srcqtbasesrcpluginssqldriversoci

    打开 oci.pro

    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)
    ?
    QMAKE_LFLAGS += D:/oracle11g/product/11.2.0/client_1BIN/oci.dll
    INCLUDEPATH += D:/oracle11g/product/11.2.0/client_1/oci/include
    LIBPATH += D:/oracle11g/product/11.2.0/client_1/oci/lib/msvc

     

#QMAKE_USE += oci
QMAKE_LFLAGS += D:/oracle11g/product/11.2.0/client_1BIN/oci.dll
INCLUDEPATH += D:/oracle11g/product/11.2.0/client_1/oci/include
LIBPATH += D:/oracle11g/product/11.2.0/client_1/oci/lib/msvc
?

操作系统,数据库,编译器都选择64为的 使用MinGw64

编译出现错误,修改源码

修改2个地方 修改源码 qsql_oci.cpp 1599行
1. 修改函数名称 OCIBindByPos2改为OCIBindByPos
2. 把bindColum.lengths 变量做指针转换 reinterpret_cast<ub2*>(bindColumn.lengths),

修改后编译后,在 D:pluginssqldrivers 目录下生成驱动

技术图片

建立qt oracle oci库 这个库需要拷贝到工程目录下

#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 DT_BASE_DTLS");
      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");
      }
  }
?
?
?
}
?

 

以上是关于qt编译oracle驱动,qt 5.12 连接 oracle 数据库示例代码的主要内容,如果未能解决你的问题,请参考以下文章

Solaris 10下Qt编译Oracle 10g驱动

Qt5.8以上版本编译Oracle数据库的OCI驱动教程

qt Oracle问题

Qt for Python 5.12初体验

Qt5.5.1和Qt5.3.2编译OCI驱动教程及验证方法

QTMysqlMySQL安装及QT连接MySQL驱动编译操作步骤