我在Android应用程序中使用SQLite。它由一个包含4列的表组成 - 第一列是“id”(整数),最后一列是AppName(String)。当我尝试通过提供特定id来从数据库中检索值时,它已成功完成。但是,当我尝试通过提供AppName从数据库中检索值时,它不起作用并给我一个例外。
以下是我用于第二种情况的函数的代码,我得到了一个例外:
@Override
public NameVO getAppInfo(String appName) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, new String[] { KEY_ID,
KEY_ENERGY, KEY_CPU, KEY_APPNAME }, KEY_APPNAME + "=?",
new String[] {appName} , null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
NameVO nameVO = new NameVO(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2), cursor.getString(3));
// return nameVO
return nameVO;
}
我得到的例外是:
E / AndroidRuntime(14852):android.database.CursorIndexOutOfBoundsException:请求索引0,大小为0
你知道如何运作吗?
提前致谢
答案 0 :(得分:2)
你可能得到一个空光标。尝试使用此
if(cursor != null) {
if(cursor.moveToFirst()) {
NameVO nameVO = new NameVO(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2), cursor.getString(3));
// return nameVO
return nameVO;
}
}
return null;
编辑:
如果你想让你所有的NameVo尝试这样做
List<NameVO> name_list= new ArrayList<NameVO();
if(cursor != null) {
if(cursor.moveToFirst()) {
do {
NameVO nameVO = new NameVO(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2), cursor.getString(3));
name_list.add(nameVO);
}
while(cursor.moveToNext());
}
return name_list;
}
return null;