Qt連接Oracle數據庫


  1. 連接數據庫

   

QSqlDatabase db;
bool    m_bIsConn;

db.setHostName("127.0.0.1");
db.setPort(1521);
db.setDatabaseName("orcl");
db.setUserName("ATIMS");
db.setPassword("123");
if(db.open())
{
     qDebug()<<QString(u8"連接成功");
     m_bIsConn = true;
}
else
{
     qDebug()<<"連接失敗";
     m_bIsConn = false;
}

 

 

   2.查詢數據庫

    if(m_bIsConn)
    {
        QSqlQuery query;
        bool bSuccess = query.exec("select * from TableName");
        if(bSuccess)
        {
            QSqlRecord rec = query.record();
            qDebug()<<tr("TableName的字段個數:")<<rec.count();
            QSqlField filed = rec.field(0);
            qDebug()<<tr("字段名稱:")<<rec.field(0).name()<<tr("字段類型:")<<rec.field(0).type()<<tr("字段值:")<<rec.field(0).value();
            qDebug()<<tr("字段名稱:")<<rec.field(1).name()<<tr("字段類型:")<<rec.field(1).type()<<tr("字段值:")<<rec.field(1).value();
            qDebug()<<tr("字段名稱:")<<rec.field(2).name()<<tr("字段類型:")<<rec.field(2).type()<<tr("字段值:")<<rec.field(2).value();
            qDebug()<<tr("字段名稱:")<<rec.field(3).name()<<tr("字段類型:")<<rec.field(3).type()<<tr("字段值:")<<rec.field(3).value();
        }
        else
        {
            qDebug()<<tr("error");
        }
    }

   細細品味,有點類似.net中的反射,通過這些屬性可以實現通用數據訪問層的封裝

   3.插入數據

if(m_bIsConn)
    {
        QSqlQuery query(db);
        bool bSuccess = false;
        QTime t;
        t.start();
        query.prepare("insert into TableName values(:a,:b,:c,:d)");
        long records = 100;
        QString strTemp = "";
        for(int i=0;i<records;i++)  //插入100條數據
        {
            query.bindValue(":a",i);
            strTemp = QString("name-%1").arg(i);
            query.bindValue(":b",strTemp);
            query.bindValue(":c",16.0);
            query.bindValue(":d","note");
            bSuccess = query.exec();
            if(!bSuccess)
            {
                QSqlError error = query.lastError();
                qDebug()<<i<<error.driverText()<<QString("插入數據失敗!");
                qDebug()<<i<<error.text()<<QString("插入數據失敗!");
            }

            //qDebug()<<query.executedQuery();
            qDebug()<<query.lastQuery();
        }

        qDebug()<<tr("插入 %1 條記錄,耗時: %2 ms").arg(records).arg(t.elapsed());
    }

  在插入數據准備Sql語句時需要注意,可以使用Oracle類型的占位符和ODBC類型的占位符,這里使用的是Oracle類型的占位符。Qt對所有數據庫均可以支持Oracle類型的占位符和ODBC類型的占位符。

  尤其需要注意的是在sql語句結束時不能加“;”(分號),否則會報“"ORA-00933: SQL 命令未正確結束\nUnable to execute statement" "插入數據失敗!"”錯誤,和在C#中有所不同,如果有知道怎么回事的仁兄可以留言指導一下。

 

 




免責聲明!

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



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