QT操作Sqlite出现No query Unable to fetch row错误问题搜集和处理办法

常见No query Unable to fetch row错误情形和处理方式如下:

1、打开数据库后进行查询或者新增修改操作后,没有执行数据库的关闭操作。解决办法就是打开数据库后记得一定要关闭。

打开数据库命令:database.open()

关闭数据库命令:database.close();

2、查询SQL语句写法错误,如不使用query.next()或者不使用query.finish()就很容易出错,标准写法如下:
if(!query.exec())
    {
        Log4qt << query.lastError().text();
    }
    else
    {
        if(query.next()){
            result= query.size();
        }
    }
    query.clear();
    query.finish();

3、SQL语句中的字段名和数据库中的不一致,需要修改SQL语句或者数据库中的字段名,使代码中和数据库中的字段名保持一致。

sql语句为:insert into TB_LOG(UserAccount) values (:UserAccount)
数据库中的TB_LOG数据表里面没有UserAccount字段,实际只有UserID字段,执行上面新增语句就会出错,解决办法是修改数据表中的UserID字段名为UserAccount后再执行,即可去除错误。

4、SQL语句中的部分函数用法不支持问题,可以尝试用类似的SQL语句来替换部分SQLITE自带函数,如:错误语句:

SELECT ifnull(count(1),0) as total FROM TB_LOGINERR WHERE ceil((datetime('now','localtime')-LoginTime)*24)=1 and LoginIP='192.168.108.1'

需修改成正确语句:

 SELECT ifnull(count(1),0) as total FROM TB_LOGINERR WHERE julianday(datetime('now','localtime'))-julianday(LoginTime) <1 and LoginIP='192.168.108.1'

修改后再执行程序方才不报错(注意的是前者在navicate for sqlite软件是可以正确执行查询的,很容易让人迷惑)。

猜你喜欢

转载自blog.csdn.net/xqf222/article/details/130416412