我正在尝试从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?这有什么问题?
答案 0 :(得分:1)
为什么我在sg_id中经常得到0?
因为它是列索引。
要获取列值,请使用例如光标上的getInt(index)
。
为什么你
CursorIndexOutOfBoundsException:请求索引0,大小为0
是因为你的光标没有任何行 - 查询没有匹配任何内容。要避免此类异常,请在尝试访问游标中的数据之前检查moveTo...()
是否返回true。