我决定为我的Qt应用程序测试sqlite db。
我已经使用正确的语句创建了sqlite db文件(创建表等并插入了一些数据行)。 我的问题是,当我执行一个select语句时,我没有得到任何记录。
这是我使用的代码:
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()似乎不起作用。
任何提示? 提前致谢, Thodoris
P.S。我忘记编写我的配置了:Qt 4.7.3,windows 7,visual studio 2008
答案 0 :(得分:2)
除了发布的错误hexa之外,即使查询失败,query.isSelect()
也将始终返回true。您需要检查exec()
的结果:
QSqlQuery query;
query.prepare( "SELECT * FROM descriptors WHERE id = ?" );
query.bindValue( 0, idx ); // assuming idx is an integer/long/QVariant value
if( !query.exec() )
{
// Error Handling, check query.lastError(), probably return
}
// Note: if you don't return in case of an error, put this into the else{} part
while( query.next() )
{
int fff = query.value( 0 ).toInt();
}
答案 1 :(得分:0)
就我而言,QSqlQueries的后向迭代有效。我认为这可能是QSQLite Driver实现中某处的错误。
QSqlQuery q = db.exec("SELECT * FROM Table");
if (q.last()) {
do {
// Do something with row...
} while (q.previous());
}