问题:在使用QT的QSqlQueryModel操作SQLite数据库的时候,drop table 时,提示错误信息database table is locked Unable to fetch row,也就是database locked,找了半天,发现,当查询结果条目大于256时,会提示此错误。
原因:
原来,QT的QSqlQuery或QSqlQueryModel每次最多只能缓存查询结果的256条。即,如果查询语句操作的结果超过256条了,也只能返回256。这样就必然会导致在后续操作中的错误。
解决办法
在操作结果前先通过fetchmore()来获取所有的结果,方法如下:
QString sqlstr;
sqlstr=QString("select * from a");
//QSqlQueryModel *model = new QSqlQueryModel
model->setQuery(sqlstr);
while(model->canFetchMore())
{
model->fetchMore();
}