Hello Stackoverflow成员!
我的应用中存在一个奇怪的问题。当表中有几个db行(大于0)时,查询效果很好。当表中没有行时,应用程序崩溃,然后,如果我删除这些行,该应用程序正常工作:
Cursor result = db.rawQuery("Select * from users ORDER BY `ID` DESC" ,null);
result.moveToFirst();
String lastuser = result.getString(resultSet2.getColumnIndex("username"));
我希望你能帮助我=]
答案 0 :(得分:1)
看起来崩溃是由于没有任何行导致的。您可以使用光标上的getCount
方法检查获得的行数。如果它为零,请不要尝试从空集中获取结果。
您可以阅读有关游标here的更多信息。
答案 1 :(得分:0)
在进行查询后,光标将位于第一个位置之前。因此,您必须将其移至第一个位置,因为您已使用result.moveToFirst()
执行此操作。但是,如果您的结果为空,则没有第一个位置,您将获得Exception
。
你可以做的是测试
if(result.moveToFirst()){
// here you can access the content
}
或者您尝试使用循环(这样您也可以对多行的结果做出反应)
while(result.moveToNext()){
String lastuser = result.getString(resultSet2.getColumnIndex("username"));
// here you can access ALL row entries one after another, or just the one row
}
Here是一个关于使用SQLite的明确教程 - 希望它有所帮助
答案 2 :(得分:0)
首先将您的查询更改为(从 ID 中移除单引号)
Cursor result = db.rawQuery("Select * from users ORDER BY ID DESC" ,null);
正如@Gooey建议您可以使用getCount
检查您获得的行数。
所以使用
Cursor result = db.rawQuery("Select * from users ORDER BY ID DESC" ,null);
if ((result != null) && (result.getCount() > 0)) {
result.moveToFirst();
String lastuser = result.getString(resultSet2.getColumnIndex("username"));
}
发布logcat异常,如果仍然出现问题。