海象先生

更深的思考,多问为什么。 GitHub:http://github.com/maokai1229

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

相比于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();
    }
阅读更多
版权声明:转载请注明出处 https://blog.csdn.net/maokai1229/article/details/75115806
文章标签: 数据库 android cursor
个人分类: android
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭