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#中有所不同,如果有知道怎么回事的仁兄可以留言指导一下。

 

 



转载于:https://www.cnblogs.com/Forward-Forever/p/10411117.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值