我在SQLite数据库中遵循表结构。
在我的SqliteOpenHelper类中,我编写了以下方法。
public Form getAllForms(){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from "+FORM_TABLE, null);
int count = cursor.getCount();
String formID = cursor.getString(0);
Form form = new Form();
form.setId(formID);
cursor.close();
db.close();
return form;
}
我确定它中有一些数据,因为我已经在调试模式下看了count
,我看到了数据库中实际存在的行数。但CursorIndexOutOfBoundException出现在cursor.getString(0)。加上cursor.getInt(0)和cursor.getString(1)也不起作用。可能是什么问题?
答案 0 :(得分:3)
您需要将光标移动到有效行。
有效行的索引从0到count-1。首先,光标将指向行索引-1,即恰好在第一行之前的那个。
循环遍历所有行的规范方法是
if (cursor.moveToFirst()) {
do {
// now access cursor columns
} while (cursor.moveToNext());
}
答案 1 :(得分:1)
在询问值之前,您需要致电moveToFirst()
才能到达第一行:
if ((cursor!= null) && (cursor.getCount() > 0)) {
cursor.moveToFirst();
while (cursor.isAfterLast() == false) {
}
所以只需使用您的代码
public Form getAllForms(){
Form form = new Form();
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from "+FORM_TABLE, null);
if ((cursor != null) && (cursor.getCount() > 0)) {
cursor.moveToFirst();
while (cursor.isAfterLast() == false) {
String formID = cursor.getString(0);
form.setId(formID);
cursor.moveToNext();
}
cursor.close();
}
db.close();
return form;
}
答案 2 :(得分:1)
试试这个
try {
cursor.moveToFirst();
for (int i = 0; i < cursor.getCount(); i++) {
Form form = new Form();
form.setId(formID);
cursor.moveToNext();
}
} finally {
// database.close();
cursor.close();
dbHelper.close();
}