Cursor用于数据库的查询读取 , Cursor 是每行的集合。使用 moveToFirst() 定位第一行。你必须知道每一列的名称。你必须知道每一列的数据类型。Cursor 是一个随机的数据源。所有的数据都是通过下标取得。
关于 Cursor 的重要方法:
- c.move(int offset); //以当前位置为参考,移动到指定行
- c.moveToFirst(); //移动到第一行
- c.moveToLast(); //移动到最后一行
- c.moveToPosition(int position); //移动到指定行
- c.moveToPrevious(); //移动到前一行
- c.moveToNext(); //移动到下一行
- c.isFirst(); //是否指向第一条
- c.isLast(); //是否指向最后一条
- c.isBeforeFirst(); //是否指向第一条之前
- c.isAfterLast(); //是否指向最后一条之后
- c.isNull(int columnIndex); //指定列是否为空(列基数为0)
- c.isClosed(); //游标是否已关闭
- c.getCount(); //总数据项数
- c.getPosition(); //返回当前游标所指向的行数
- c.getColumnIndex(String columnName);//返回某列名对应的列索引值,如果不存在返回-1
- c.getString(int columnIndex); //返回当前行指定列的值
- c·getColumnIndexOrThrow(String columnName)——从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常。
- c.close()——关闭游标,释放资源
另:Activity.startManagingCursor方法:
将获得的Cursor对象交与Activity管理,这样Cursor对象的生命周期便能与当前的Activity自动同步,省去了自己对Cursor的管理。
- 1.这个方法使用的前提是:游标结果集里有很多的数据记录。
所以,在使用之前,先对Cursor是否为null进行判断,如果Cursor != null,再使用此方法
- 2.如果使用这个方法,最后也要用stopManagingCursor()来把它停止掉,以免出现错误。
- 3.使用这个方法的目的是把获取的Cursor对象交给Activity管理,这样Cursor的生命周期便能和Activity自动同步,省去自己手动管理。
private People[] ConvertToPeople(Cursor cursor){
int resultCounts = cursor.getCount();//总共的数据量
if(resultCounts == 0 || !cursor.moveToFirst()){//指针移动到第一条数据不成功
return null;
}
People[] peoples = new People[resultCounts];//
for(int i=0;i<resultCounts;i++){
peoples[i] = new People();
peoples[i].ID = cursor.getInt(0);//获取每行数据的ID
peoples[i].Name = cursor.getString(cursor.getColumnIndex(KEY_NAME));//获取对应数据行的KEY的String
peoples[i].Age = cursor.getInt(cursor.getColumnIndex(KEY_AGE));//获取对应数据行的KEY的int
peoples[i].Height = cursor.getInt(cursor.getColumnIndex(KEY_HEIGHT));//获取对应数据行的KEY的int
cursor.moveToNext();
}
return peoples;//返回对象
}
//数据库插入数据
public long insert(People people){
ContentValues newValue = new ContentValues();
newValue.put(KEY_NAME,people.Name);
newValue.put(KEY_AGE,people.Age);
newValue.put(KEY_HEIGHT,people.Height);
return db.insert(DB_TABLE,null,newValue);
}
//数据库删除所有数据
public long deleteAllData(){
return db.delete(DB_TABLE, null, null);
}
//数据库删除指定id的数据
public long deleteOneData(long id){
return db.delete(DB_TABLE, KEY_ID + "="+ id,null);
}
//查询表中所有数据
public People[] queryAllData(){
Cursor results = db.query(DB_TABLE,new String[] { KEY_ID,KEY_NAME,KEY_AGE,KEY_HEIGHT},null,null,null,null,null);
return ConvertToPeople(results);
}
//查询表中指定id的数据
public People[] queryOneDta(long id){
Cursor results = db.query(DB_TABLE,new String[] {KEY_ID, KEY_NAME, KEY_AGE, KEY_HEIGHT},KEY_ID+"="+id,null,null,null,null);
return ConvertToPeople(results);
}
//更新表中数据
public long updateOneData(long id, People people){
ContentValues updateValues = new ContentValues();
updateValues.put(KEY_NAME,people.Name);
updateValues.put(KEY_AGE,people.Age);
updateValues.put(KEY_HEIGHT,people.Height);
return db.update(DB_TABLE,updateValues, KEY_ID + "=" + id,null);
}
网友评论