Qt关于使用QSqlQuary::size()这个函数值返回是-1

QSqlQuary::size( )

今天做项目的时候,用Qt连接Oracle数据库,前面都是连接成功,但是用SQL语句去操作数据库的时候,发现老是读不到内容,卡了好久。

	QSqlQuery RuleQuery;
    RuleQuery = QSqlQuery(OracleCon);
    qDebug() << command;  //command 是SQL语句
    if (!RuleQuery.exec(command)) {
        qDebug() << "exec error!";
    }
    qDebug() << "RuleQuery.size() : " << RuleQuery.size();
    for( int i=0;i<=RuleQuery.size();i++){
        recvData.push_back(RuleQuery.value(0).toInt());
        qDebug() << "RuleQuery.value(0) : " <<  RuleQuery.value(0);
    }
这里的`RuleQuery.size()`一直是-1,导致我一直以为数据库没有连接上

本人又是数据库小白不知道其他的检验方法,还去本地的Oracle客户端试了一下SQL语句是否能执行,发现也能执行,真是纳了闷了。
然后我在别的博客上看到了另外的一种方法,

	QSqlQuery RuleQuery;
    RuleQuery = QSqlQuery(OracleCon);
    qDebug() << command;  //command 是SQL语句
    if (!RuleQuery.exec(command)) {
        qDebug() << "exec error!";
    }
    qDebug() << "RuleQuery.size() : " << RuleQuery.size();
	
	// 改动的地方在这里,使用了QSqlQuery::next()
    while (RuleQuery.next()) {
        recvData.push_back(RuleQuery.value(0).toInt());
        qDebug() << RuleQuery.value(0).toString();
    }
用这种方法,能行!!

于是,本人怀着“在被坑过之后不但要填坑,还要明白坑是怎么来的!”的信条,就开始了找原因的路程。

  1. 先是在Qt官方文档中查看QSqlQuary::size( )的文档
    QSqlQuary::size( )大致意思就是说,size()返回结果的大小,如果大小不能确认或者如果数据库不支持报告有关查询大小的信息就返回-1,而且下面还标注了,察看QSqlDriver::hasFeature这个函数,但是本人没有去看 0 . 0(不得不说,Qt的手册真的是写的很好,文字都是比较容易理解的。)
  2. 然后就是百度一通找啊,想找一下hasFeature的用法,然后想着去bing上用国外版搜搜看有没有(有一说一,国外的网站的技术内容真的要比国内的要多,搜计算机知识还是很多去StackOverflow之类的)
    在StackOverflow最终找到了答案…
    https://stackoverflow.com/questions/26495049/qsqlquery-size-always-returns-1
    使用方法如下:
    QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
    qDebug() << db.driver()->hasFeature(QSqlDriver::QuerySize);
    
    手册上有关于driver()和hasFeature()以及QSqlQuary::QuerySize的介绍,就不贴出来了。

有的时候还是要认认真真的看手册0.0,或者去国外的网站去搜索内容,国内的内容比较少。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值