从db检索记录返回ID为0的对象

时间:2014-08-01 13:30:55

标签: android sqlite

我正在尝试从DB中检索对象:

Selected_Group sg = 
    manager.get_selected_group_by_group_id_and_trip_id(group_to_remove.getGroup_id(), trip_id);

这是我的DB Manager类中的方法:

public Selected_Group get_selected_group_by_group_id_and_trip_id(int trip_id, int group_id)
{
    open_readable();
    Cursor cursor = db.query(Constants.Table_Names.TABLE_NAME_SELECTED_GROUPS, null, "trip_id="+trip_id+" AND group_id="+group_id, null, null, null, null);

    cursor.moveToFirst();
    int sg_id = cursor.getColumnIndex("_id");
    int sg_trip_id = cursor.getColumnIndex("trip_id");
    int sg_group_id = cursor.getColumnIndex("group_id");
    Selected_Group sg = new Selected_Group(sg_id, sg_trip_id, sg_group_id);
    cursor.close();
    close();
    return sg;
}

传递的参数例如是trip_id = 18和group_id = 1。只有一个匹配这些的记录,它的_id = 54。但由于某种原因,我得到sg_id = 0.

这是我在DB Helper类中创建表的方式:

String create_table_selected_groups = "CREATE TABLE "+Constants.Table_Names.TABLE_NAME_SELECTED_GROUPS+" (_id INTEGER PRIMARY KEY AUTOINCREMENT"+
            ", trip_id INTEGER, group_id INTEGER);";
db.execSQL(create_table_selected_groups);

我试着像这样得到sg_id:

 int sg_id = cursor.getInt(0);

但应用程序崩溃并显示错误消息:

08-01 14:31:17.416: E/AndroidRuntime(13385): FATAL EXCEPTION: main
08-01 14:31:17.416: E/AndroidRuntime(13385): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
08-01 14:31:17.416: E/AndroidRuntime(13385):    at android.database.AbstractCursor.checkPosition(AbstractCursor.java:400)
08-01 14:31:17.416: E/AndroidRuntime(13385):    at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
08-01 14:31:17.416: E/AndroidRuntime(13385):    at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:68)
08-01 14:31:17.416: E/AndroidRuntime(13385):    at com.mycompany.myapp.tasks.Task_DB_Manager.get_selected_group_by_group_id_and_trip_id(Task_DB_Manager.java:542)
08-01 14:31:17.416: E/AndroidRuntime(13385):    at com.mycompany.myapp.activities.Activity_Add_Edit_Trip.onClick(Activity_Add_Edit_Trip.java:263)
...

为什么我一直在sg_id中获得0?这有什么问题?

1 个答案:

答案 0 :(得分:1)

  

为什么我在sg_id中经常得到0?

因为它是列索引。

要获取列值,请使用例如光标上的getInt(index)

为什么你

  

CursorIndexOutOfBoundsException:请求索引0,大小为0

是因为你的光标没有任何行 - 查询没有匹配任何内容。要避免此类异常,请在尝试访问游标中的数据之前检查moveTo...()是否返回true。