QtSQLite选择语句
我决定为我的Qt应用程序测试sqlite db 我已经用适当的语句创建了sqlite db文件(CREATETABLE等,并插入了一些数据行)。 我的问题是,当我执行select语句时,我没有得到任何记录 这是我使用的代码:QtSQLite选择语句,qt,sqlite,select,Qt,Sqlite,Select,我决定为我的Qt应用程序测试sqlite db 我已经用适当的语句创建了sqlite db文件(CREATETABLE等,并插入了一些数据行)。 我的问题是,当我执行select语句时,我没有得到任何记录 这是我使用的代码: qq.sprintf("SELECT * from descriptors WHERE descriptors.id=%d ",idx); query.exec(qq); if( query.isSelect() ){ while (query.next()){
qq.sprintf("SELECT * from descriptors WHERE descriptors.id=%d ",idx);
query.exec(qq);
if( query.isSelect() ){
while (query.next()){
int fff = query.value(0).toInt();
}}
问题是我从来没有进入while循环。query.next()似乎不起作用
有什么提示吗?
提前感谢,,
多丽丝
p、 我忘了写我的配置,所以:Qt 4.7.3、windows 7、visual studio 2008除了hexa发布的错误之外,
query.isSelect()
即使查询失败也将始终返回true。您需要检查exec()
的结果:
QSqlQuery查询;
准备(“从id=?”的描述符中选择*”;
query.bindValue(0,idx);//假设idx是一个整数/长/QVariant值
如果(!query.exec())
{
//错误处理,检查query.lastError(),可能返回
}
//注意:如果发生错误时没有返回,请将其放入else{}部分
while(query.next())
{
int fff=query.value(0.toInt();
}
在我的例子中,对QSQL查询的反向迭代是有效的。我认为这可能是QSQLite驱动程序实现中的一个bug
QSqlQuery q = db.exec("SELECT * FROM Table");
if (q.last()) {
do {
// Do something with row...
} while (q.previous());
}
您不应该这样构造查询,否则会再次发生。谢谢你的回答和漫画。我在mysql中使用了这种查询结构,效果很好。我会尝试使用绑定来看看会发生什么,当然我会更新它,它会工作得很好。直到鲍比的桌子出现。工作正常并不意味着就没事。这就像运行停止标志。它一直工作到有人死。谢谢你的回答,但这也不起作用。我想这不是语法问题,而是其他问题。。。我会让你们知道我的结果。再次谢谢,谢谢你。有一系列问题。首先是绑定,其次是未正确构造的数据库文件(保存为字符串的int)。再次感谢你帮我解决这个问题