android sqlite游标崩溃了应用程序

时间:2014-07-20 13:19:54

标签: android android-activity android-sqlite

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"));

我希望你能帮助我=]

3 个答案:

答案 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异常,如果仍然出现问题。