qt編譯oracle驅動,qt 5.12 連接 oracle 數據庫示例代碼


qt 5.12.5 編譯 oracle11g R2 驅動

  1. 下載安裝oracle客戶端 oracle11g R2 64位

     

  2. 安裝qt 5.12

  3. D:\alantop_sde\Qt\5.12.5\Src\qtbase\src\plugins\sqldrivers\oci

    打開 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_1\BIN/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_1\BIN/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:\plugins\sqldrivers 目錄下生成驅動

建立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");
      }
  }



}

 


免責聲明!

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



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