cursorIndexOutOfBounds即使在使用moveToFirst()和检查游标的值时也会出错

时间:2013-10-10 08:51:31

标签: android sqlite

我一直在努力解决这个遗憾问题。我在我的应用程序中使用了很多其他游标方法,这些方法作为一个魅力,但这个方法真的很难解决。

public int getCategoryCode(String category){
    int d=0;
    Cursor cg=database.query("categoryTable", null, "category_name='"+category+"'", null, null, null, null);
        cg.moveToFirst();   
    Log.d("success", String.valueOf(cg.getColumnIndex("_id")));

    Log.d("success", String.valueOf(cg.getCount()));

    cg.getInt(cg.getColumnIndex("_id"));
    return d;

当我尝试检索“_id”列中保存的“整数”时,程序返回异常。我已检查“id”列中是否存在结果,因为cg.getColumnIndex()在logcat中返回0。请帮忙!!

3 个答案:

答案 0 :(得分:1)

试试这个(EDITED)!!:

     public int getCategoryCode(String category){
         int d=0;
         Cursor cg= database.rawQuery("SELECT _id FROM categoryTable WHERE category_name = '"+category+"' ",null);

         if(cg.moveToFirst()){
             if(!mCursorActual.isNull(cg.getColumnIndex("_id"))){
               d = cg.getInt(cg.getColumnIndex("_id"));

             } else {
               d = 0;
             }
             cg.close();

                return d;
         }
     }

答案 1 :(得分:0)

尝试检查:

if((cg!= null) && (cg.getCount() > 0)){
  cg.moveToFirst();
  //DO YOUR STUFF
}

答案 2 :(得分:0)

使用以下代码

cursor.moveToFirst();
if(cursor.isAfterLast() == false) {

    // Your logic goes here
}

此外,您可以确定表中有数据,使用断点确保查询正确,查看查询完成后是否有光标对象。