在上一部分《SQLite数据库—sql语句的基础使用》中介绍了SQLite数据库基本的DDL、DML操作,在最后的一个小案例中,在查询数据库时,使用到了Cursor游标获取了查询结果,但是无法直接使用,我们采用的List集合封装对应的实体类,来完成了ListView的列表展示,所以这一章节,我们使用SQLite的适配器,来直接将查询到的Cursor数据展示到ListView。
在SQLite数据库中,有两种适配器类型:SimpleCursorAdapter、CursorAdapter,接下来分别介绍这两种适配器。
1.SimpleCursorAdapter
我们在查询数据库中的数据时,通常是通过SQLiteOpenHelper的getReadableDatabase或者getWriteableDataBase去获取数据库连接对象,执行sql语句完成查询操作;如果数据库是在SD卡下,或者其他的路径下,该怎么去得到这个数据库的连接对象?
通过SQLiteDataBase的openDataBase的方式同样也可以获取数据库连接对象进行查询操作。
和之前一样,在执行sql语句得到Cursor对象之后,Cursor对象就是数据源,按之前的做法是将Cursor转换为List集合,填充到适配器中,而这次我们是通过SimpleCursorAdapter来作为ListView的适配器;
在Android中,有一个适配器是SimpleAdapter,他的数据源是Map集合存储键值对,如下图所示
其实和SimpleAdapter一样,SimpleAdapter是将每个Map加载到每个item上,只不过SimpleCursorAdapter的数据源是Cursor而已。
用法和SimpleAdapter基本类似,SimpleAdapter是将Map集合中的数据添加到item布局中,SimpleCursorAdapter是将Cursor查询的数据表中的数据添加到item布局。
通过这个方式进行适配后,运行发现闪退,报错如下:
字面上的意思是,“_id”字段不存在,是不合法的;在之前建立数据表的时候,我用id作为字段名,我将之前的数据表删除之后,重建数据表。
但是数据表重建之后,还是同样的问题,后来查资料后明白,在使用Cursor类的Adapter时,必须要有这个"_id"字段,而且在sql语句中必须要查找这个字段,之前的sql只是查询了name和age字段,所以加上id字段后,再执行,没问题了。
执行后的结果:
2.CursorAdapter
除了SimpleCursorAdapter之外,还有CursorAdapter同样也可以使用Cursor作为数据源来进行数据的适配。
CursorAdapter是一个继承自BaseAdapter的抽象类,因此需要创建一个类去继承,实现其构造方法和2个重要的view方法;
因为是继承自BaseAdapter,所以跟BaseAdapter优点类似,两个View的方法相当于将BaseAdapter中的getView方法拆分成了2步:
(1)newView:指的是每个itemView对象;
(2)bindView:为每个itemView绑定数据。
为ListView设置适配器,运行正常
显示结果和SimpleCursorAdapter一样,在此就不展示了。
本文主要介绍了两种Cursor适配器的使用,解决了在《SQLite数据库—sql语句的基础使用》中,需要将Cursor数据源转换为List的弊端,可以直接使用SimpleCursorAdapter或者CursorAdapter对Cursor数据源的直接使用,高效方便。