0

我在我的 Android 应用程序中使用 SQLite。它由一个包含 4 列的表组成 - 第一个是“id”(整数),最后一个是 AppName(字符串)。当我尝试通过提供特定 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

你知道如何让它工作吗?

提前致谢

4

1 回答 1

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;
于 2013-06-18T15:01:44.113 回答