到目前为止,这让我感到难过。
尝试运行此特定查询时,我一直得到CursorIndexOutOfBounds。
Cursor c = db.rawQuery("SELECT * FROM table WHERE _id='2'" , null);
但是奇怪的是,在该查询之上,我正在运行一个循环,该循环输出该表中的所有_id值。它输出1到100,所以我知道值在那里。我也输出所有列,并且它们都在我期望的位置。
即使我很确定有值,并且在正确的列中,这一行代码仍使CursorIndexOutOfBounds保持不变。谁能提出解决这个问题的途径。
numval = c.getInt(c.getColumnIndex("_id"));
Logcat条目
11-21 11:35:09.367: ERROR/AndroidRuntime(11664): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
编辑
这是我正在运行的确切代码。我仍然收到我在此句子上方发布的错误。
Cursor cur = db.rawQuery("SELECT * FROM table" , null);
cur.moveToFirst();
while (cur.isAfterLast() == false) {
numval = cur.getInt(cur.getColumnIndex("_id"));
String numvalval = Integer.toString(numval);
Log.e("RESULT",numvalval);
cur.moveToNext();
}
cur.close();
Cursor ti = db.rawQuery("PRAGMA table_info(table)", null);
if ( ti.moveToFirst() ) {
do {
Log.e("COLUMN NAMES","col: '" + ti.getString(1) +"'");
} while (ti.moveToNext());
}
ti.close();
Cursor c = db.rawQuery("SELECT * FROM table WHERE _id='2'" , null);
c.moveToFirst();
numval = c.getInt(c.getColumnIndex("_id"));
正在输出
11-21 13:27:25.906: ERROR/RESULT(13377): 1
11-21 13:27:25.906: ERROR/RESULT(13377): 2
11-21 13:27:25.910: ERROR/COLUMN NAMES(13377): col: '_id'
11-21 13:27:25.910: ERROR/COLUMN NAMES(13377): col: 'country'
最佳答案
请参阅编辑,在您编辑问题后,以下建议不再有效。
当您获得一个Cursor
对象时,应始终将其始终移到第一行。因此,您的代码应如下所示:
if(c.moveToFirst()) {
numval = c.getInt(c.getColumnIndex("_id"));
}
else {
/* SQL Query returned no result ... */
}
编辑
将您的查询更改为此(不带引号“ 2”):
Cursor c = db.rawQuery("SELECT * FROM table WHERE _id=2" , null);