从SQLite数据库Android中检索值时出现异常

时间:2013-06-18 14:58:40

标签: android sqlite

我在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

你知道如何运作吗?

提前致谢

1 个答案:

答案 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;