记一次坑爹的数据库查询

1
2
3
4
5
6
7
Cursor c = context.getContentResolver().query(mQureyUri,
new String[]{CATEGORYID, CATEGORY2ID}, PKG_NAME + "=?", new String[]{pkg}, null, null);
if (c == null) {
Log.i(TAG, "can't find " + pkg + "'s category");
return -1;
}
int categoryId = c.getInt(c.getColumnIndex(CATEGORYID));

因为业务需要查询数据库,但是运行之后报错

1
android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1

和维护数据库的同事交涉许久,以为是他给的uri路径不对,最后他一语点醒梦中人,

你没加[cursor.moveToFirst()]吧.

好吧,不得不承认读写数据库的水品是差了点。
Stackoverflow有人和我碰到相同的问题.

接着看文档里是说,调用此方法,使得cursor移动到第一行,

added in API level 1
boolean moveToFirst ()
Move the cursor to the first row.
This method will return false if the cursor is empty.
Returns
boolean whether the move succeeded.

因为返回的cursor默认的位置是在 -1 行,这就是为什么while(cursor.moveToNext())也不会把第一行数据漏遍历的秘密。 = = 。