Android笔记——关于Cursor类的介绍

使用过 SQLite数据库的童鞋对 Cursor 应该不陌生,加深自己和大家对Android 中使用 Cursor 的理解。

      关于 Cursor

      在你理解和使用 Android Cursor 的时候你必须先知道关于 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()——关闭游标,释放资源

下面来看看一段代码:

Button query=(Button) findViewById(R.id.query_data);

        query.setOnClickListener(new OnClickListener(){

            @Override

            public void onClick(View v) {

                SQLiteDatabase db=dbHelper.getWritableDatabase();

                //查询Book表中的所有的数据

                //Cursor cursor=db.query("Book", null, null, null, null, null, null);

                Cursor cursor=db.rawQuery("Select * from Book", null);

                if(cursor.moveToFirst()){

                    do{

                        //遍历Cursor对象,取出数据并打印

                        String name=cursor.getString(cursor.getColumnIndex("name"));

                        String author=cursor.getString(cursor.getColumnIndex("author"));

                        int pages=cursor.getInt(cursor.getColumnIndex("pages"));

                        double price=cursor.getDouble(cursor.getColumnIndex("price"));

                        Log.d("MainActivity","book name is"+name);

                        Log.d("MainActivity","book author is"+author);

                        Log.d("MainActivity","book pages is"+pages);

                        Log.d("MainActivity","book price is"+price);

                    }while(cursor.moveToNext());

                }

                cursor.close();

            }

        });

访问 Cursor 的下标获得其中的数据

int nameColumnIndex = cur.getColumnIndex(People.NAME);

String name = cur.getString(nameColumnIndex);

现在让我们看看如何循环 Cursor 取出我们需要的数据

while(cur.moveToNext()) {

//光标移动成功

String email =cursor.getString(cursor.getColumnIndex(RuiXin.EMAIL));

startManagingCursor(cursor);//查找后关闭游标 

//把数据取出

}

当cur.moveToNext() 为假时将跳出循环,即 Cursor 数据循环完毕。

     如果你喜欢用 for 循环而不想用While 循环可以使用Google 提供的几下方法:

·isBeforeFirst()——返回游标是否指向之前第一行的位置

·isAfterLast()——返回游标是否指向第最后一行的位置

·isClosed()——如果返回 true 即表示该游戏标己关闭

有了以上的方法,可以如此取出数据

for(cur.moveToFirst();!cur.isAfterLast();cur.moveToNext())

{

int nameColumn = cur.getColumnIndex(People.NAME);

int phoneColumn = cur.getColumnIndex(People.NUMBER);

String name = cur.getString(nameColumn);

String phoneNumber = cur.getString(phoneColumn);

}

Tip:在Android 查询数据是通过Cursor 类来实现的。当我们使用 SQLiteDatabase.query()方法时,就会得到Cursor对象, Cursor所指向的就是每一条数据。

Cursor 位于 android.database.Cursor类,可见出它的设计是基于数据库服务产生的。

以上转自:http://blog.sina.com.cn/s/blog_618199e60101fskp.html


另:Activity.startManagingCursor方法:

将获得的Cursor对象交与Activity管理,这样Cursor对象的生命周期便能与当前的Activity自动同步,省去了自己对Cursor的管理。

1.这个方法使用的前提是:游标结果集里有很多的数据记录。

所以,在使用之前,先对Cursor是否为null进行判断,如果Cursor != null,再使用此方法

2.如果使用这个方法,最后也要用stopManagingCursor()来把它停止掉,以免出现错误。

3.使用这个方法的目的是把获取的Cursor对象交给Activity管理,这样Cursor的生命周期便能和Activity自动同步,省去自己手动管理。

你可能感兴趣的:(Android笔记——关于Cursor类的介绍)