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();
}
用这种方法,能行!!
于是,本人怀着“在被坑过之后不但要填坑,还要明白坑是怎么来的!”的信条,就开始了找原因的路程。
- 先是在Qt官方文档中查看
QSqlQuary::size( )
的文档
大致意思就是说,size()返回结果的大小,如果大小不能确认或者如果数据库不支持报告有关查询大小的信息就返回-1,而且下面还标注了,察看QSqlDriver::hasFeature
这个函数,但是本人没有去看 0 . 0(不得不说,Qt的手册真的是写的很好,文字都是比较容易理解的。) - 然后就是百度一通找啊,想找一下
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,或者去国外的网站去搜索内容,国内的内容比较少。