一、前言:最近在学安卓SQLite包括数据库的增删改查,在操作到查询的时候报错了 android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 8。他是什么意思呢大概意思是android中数据库处理使用curson时,游标不是放在为0的下标,而是放在为-1的下标开始的,也就是说:“返回给curson查询结果时,不能够马上从cursor中提取值”。
二、解决方法
这是我之前的错误代码
public List<User> queryAll(){
List<User> list = new ArrayList<>();
//执行记录查询动作,该语句返回结果集的游标
Cursor cursor = mRDB.query(TABLE_NAME,null,null,null,null,null,null);
//循环取出游标指向的每一条记录
User user = new User();
user.id = cursor.getInt(0);
user.name = cursor.getString(1);
user.age = cursor.getInt(2);
user.height = cursor.getLong(3);
user.weight = cursor.getFloat(4);
//SQLite没有布尔类型,用0表示false,用1表示true
user.married = (cursor.getInt(5) == 0) ? false :true;
return list;
}
修改过后的代码
public List<User> queryAll(){
List<User> list = new ArrayList<>();
//执行记录查询动作,该语句返回结果集的游标
Cursor cursor = mRDB.query(TABLE_NAME,null,null,null,null,null,null);
//循环取出游标指向的每一条记录
User user = new User();
while (cursor.moveToNext()){
user.id = cursor.getInt(0);
user.name = cursor.getString(1);
user.age = cursor.getInt(2);
user.height = cursor.getLong(3);
user.weight = cursor.getFloat(4);
//SQLite没有布尔类型,用0表示false,用1表示true
user.married = (cursor.getInt(5) == 0) ? false :true;
}
return list;
}
三、总结:
应把获取的代码都放到while(curson.moveToNext()){ }中就不会出错了