精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
联系方式
服务方向
锐英源精品开源,禁止转载和任何形式的非法内容使用,违者必究
最近完成一个Linux下的通信项目,用QT开发,访问了2个类型的数据库,中间遇到了不少问题,毕竟以前没用过这类环境,不过问题也都解决了。本文列举了最常见的错误:Unable to fetch row错误和No query错误。写如下代码段进行查询时,会遇到上述错误:
QSqlQuery sql_query(*localdb); //查询所有记录 QString select_all_sql = "select type from user where username='"+id+"' and passwd='"+passwd+"'"; sql_query.prepare(select_all_sql); if(!sql_query.exec()) { QMessageBox::critical(0,QString::fromUtf8("错误提示"),QString::fromUtf8("登录异常"),QMessageBox::Cancel); qDebug()<<sql_query.lastError(); }
输出是由qDebug()语句执行时实现。
No query表示没有查询,其实是查询错的意思。有错,就导致查询不了,也就是Unable to fetch row结果,不能提取行集。
SQL语句的错误千变万化,在编程环境里肉眼分析是有难度的,一般是把SQL语句放到数据库客户端里执行,进行找错,不过这也不是初学者能理解的。
有一次出事是因为单引号多了一个,在SQL语句里字符数值要用单引号包含,如果多了个单引号,数据库解析语句就会失败,就不会执行查询,返回行集。
另外一次报错,看着SQL语句一点儿问题都没有啊,放客户端里执行也没报错,当时就几乎放弃了,后来查了查字段名,发现设计的字段名里有空格,代码里的SQL语句没空格,把表设计里的字段名里多余空格去掉,问题解决。