关闭

5分钟轻松解决Android数据库访问,Cursor类的基础使用

标签: 数据库androidcursor
7237人阅读 评论(0) 收藏 举报
分类:

相比于MySql等数据库,SqLite有它自己的工具Cursor,一次获取一行数据(在数据库中,一行包含了一个主键约束的索引的全部内容)。

Cursor就像高中物理课上的游标卡尺

使用游标来读数据库一般分两步:(就像在游标卡尺上读数)

1.横向的获取列名所对应的位置(储存在Cursor中的位置),getColumnIndex方法

2.通过得到的位置,getString(index) or getInt(index)

3.也可以做循环输出
while (cursor.moveNex()t){
//move方法 返回一个布尔值,当到达最后一行时,返回false
}

下面结合的例子Cursor与RecyclerLayout的结合使用,大部分代码无难度,主要是对RecyclerView的适配器不熟悉,造成加载数据的部分花了很多coding时间。

首先是cursor中数据的读取

 protected void bind(int position){
           if(!cursor.moveToPosition(position))
               return;
               //若选中位置没有数据,返回,其实还是一个安全保护,防止程序意外崩溃
               int index;
               index=cursor.getColumnIndex(WaitlistContract.WaitlistEntry.COLUMN_GUEST_NAME);
               String guestName=cursor.getString(index);
               index=cursor.getColumnIndex(WaitlistContract.WaitlistEntry.COLUMN_TIMESTAMP);
               String time=cursor.getString(index);
               nameTextView.setText(time);
               partySizeTextView.setText(guestName);
        }

其中妙处在于,RecyclerView适配器的position刚好和cursor中的moveToPosition完美的结合起来了,不得不赞叹Google工程师的智慧。

 @Override
    public GuestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
       //获取填充器
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.guest_list_item, parent, false);
        return new GuestViewHolder(view);
    }

    @Override
    public void onBindViewHolder(GuestViewHolder holder, int position) {
    //holder是ViewHolder实例
          holder.bind(position);
    }



    @Override
    public int getItemCount() {
        return cursor.getCount();
    }
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:58967次
    • 积分:694
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:1篇
    • 译文:0篇
    • 评论:1条
    文章分类
    文章存档
    最新评论