光标索引Out Beounds在尝试从数据库中获取值时

时间:2014-07-07 17:24:26

标签: android sql

我试图创建一个从数据库返回值的方法,并获得CursorIndexOutOfBounds: (第94行是:字符串计数= c.getString(1);)

public String getCount() {
        // TODO Auto-generated method stub
        String[] columns = new String[] { KEY_ROWID, KEY_COUNT };

        Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=1",null, null, null, null);

        if (c != null) {
            c.moveToFirst();
            String count = c.getString(1);
            return count;
        }
        return null;
    }

logcat的:

07-07 19:51:53.408: E/AndroidRuntime(27923): FATAL EXCEPTION: main
07-07 19:51:53.408: E/AndroidRuntime(27923): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
07-07 19:51:53.408: E/AndroidRuntime(27923):    at android.database.AbstractCursor.checkPosition(AbstractCursor.java:424)
07-07 19:51:53.408: E/AndroidRuntime(27923):    at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
07-07 19:51:53.408: E/AndroidRuntime(27923):    at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
07-07 19:51:53.408: E/AndroidRuntime(27923):    at com.example.fartsound.MyDataBase.getCount(MyDataBase.java:94)

3 个答案:

答案 0 :(得分:0)

光标从' 0'开始。用这个:

String count = c.getString(0);

答案 1 :(得分:0)

在if语句中移动c.moveToFirst()。如果返回false,则游标为空并将获得该错误

if (c != null && c.moveToFirst()) 

答案 2 :(得分:0)

moveToFirst()方法的文献:

  

public abstract boolean moveToFirst()将光标移动到第一行。如果光标为空,则此方法将返回false。

     

返回移动是否成功。

所以你的moveToFirst调用失败了(因为cusrsor有0个元素),这就是崩溃的原因。

这样做:

if(c != null && c.moveToFirst()) {
      String count = c.getString(0);
      return count;
}