美文网首页
Android笔记——关于Cursor类的介绍

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

作者: 哈哈撒拉嘿 | 来源:发表于2018-11-28 09:55 被阅读0次

    使用过 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类的介绍

          本文链接:https://www.haomeiwen.com/subject/gmtaqqtx.html