SQLite数据库 +  ListView控件

SQLite数据库简介

SQLite是一个轻量级数据库,它最初是为嵌入式设计的,占用资源非常少,在内存中只需要占用

几百KB的存储空间。这也是Android移动设备采用SQLite数据库的最重要的原因之一。

SQLite数据库是尊守ACID的数据库特性。即A原子性、C一致性、I隔离性和D持久性。

同时SQLite还支持基本的SQL语言(创建表,删除表,增删改查数据),事务处理等功能。

SQLite没有服务器端之说,它通过db文件保存数据,该文件是跨平台,可以放在其它平台中使用。

在保存数据时,支持null,integer,real,text(无大小限制)和blob这五种数据类型。但实际上,

SQLite也可以接收varchar数据类型,只不过在运算或保存时会转换成对应的五种数据类型,

这也是SQLite数据库的最大特点。

SQLite数据库文件有大小限制吗?

答:看版本,有限制

在 windows 和 unix 下,版本 2.7.4的 sqlite 可以达到 2的41次方字节 (2t 字节)。老版本的为 2的31 次方字节(2g 字节)。

sqlite 版本 2.8 限制一个记录的容量为 1m。sqlite 版本 3.0 则对单个记录容量没有限制。

体验一下在window中使用SQLite数据库

 打开CMD窗口,依次输入以下命令:

     》C:>cd E:\Android-Tools\adt-bundle-windows-x86_64-20140702\sdk\platform-tools

     》C:>E:

     》E:>sqlite3 itcast.db

     》sqlite>create table users(id integer primary key autoincrement,

name text not null,

sex text not null);

     》sqlite>.tables

     》sqlite>insert into users(name,sex) values('哈哈','男');

     》sqlite>insert into users(name,sex) values('呵呵','男');

     》sqlite>select * from users;

     》sqlite>.mode column

     》sqlite>select * from users;

     》sqlite>.exit

上述产生的itcast.db数据库文件,位于E:\Android-Tools\adt-bundle-windows-x86_64-20140702\sdk\platform-tools目录下

SQLite数据库的使用

SQLite操作API

为了方便使用SQLite数据库,Android SDK提供了一系列对数据库进行操作的类和接口,它们分别是:

1——SQLiteOpenHelper类,用于创建数据库和数据库版本更新

SQLiteOpenHelper(Context context,String name,CursorFactory factory,int version)

构造方法,传递一个以db为扩展名数据库名称name和版本号version,

版本号最小为1,只升不降

onCreate():如果没有数据库文件时就调用该方法创建表;如果有数据库文件时就不调用该方法

onUpgrade():如果数据库文件版本更新时就调用该方法;如果数据库文件版本没有更新则不调

    getReadableDatabase():创建或打开一个只读数据库,常用于查询操作

    getWriteableDatabase():创建或打开一个读写数据库,常用于非查询操作

2——SQLiteDatabase类,用于访问数据库的类,可以进行增删改查操作

Insert():增加一条记录

Query():查询一条或多条记录

Update():更新一条记录

    Delete():删除一条记录

rawQuery(String sql):执行一条可带有占位符的SQL语句,适用于查询操作

execSQL(String sql):执行一条可带有占位符的SQL语句,适用于增删改操作

close():关闭数据库,即相当于关闭IO流,释放资源

3——Cursor接口,是一个游标,在查询数据库时用到

moveToNext():移动光标到下一行

getInt():获取指定列的整型值

getString():获取指定列的字符串值

moveToFirst():移动光标到第一行

getCount():返回Cursor中的行数

close():关闭游标

SQLite常用操作

增:addWithSQL()和addWithMethod()

改:updateWithMethod()

删:deleteWithMethod()

查一:findByIdWithMethod()

查多:findAllWithSQL()和findAllWithMethod()

SQLite事务操作

事务就是针对数据库的一组操作,它可以由一条或多条SQL语句组成,

同一个事务的操作具备同步的特点,即如果一条语句执行失败,那么所有语句都不执行失败。

SQLiteDatabase类中常用的事务API如下:

1——beginTransaction():事务开始

2——setTransactionSuccessful():设置事务成功标志

3——endTransaction():结束事务,如果有成功标志,则提交事务;否则撤销/回滚到事务开始之前

最后一定要关闭数据库

sqlite3工具

在Android开发中,使用真机进行测试无法进入data目录(只有获取Root权限的手机才行),

所以也无法直接操作应用程序下的数据库。为了解决这个问题,SQLite数据库为开发者提供

了一个sqlite3.exe工具,通过这个工具可以在不进入data目录下,直接操作数据库。

sqlite3.exe是一个简单的SQLite数据库管理工具,位于Android SDK/platform-tools目录下,

使用前,必须先启动模拟器或者真实手机,再进入DOS命令行,依次输入以下命令:

1——adb shell 转入linux空间,不是window空间,因为模拟器位于linux操作系统上

2——cd data/data

3——cd cn.itcast.db

4——ls

5——cd databases

6——ls

7——sqlite3 itcast.db 使用sqlite3命令操作itcast数据库

8——select * from users; 书写基本的SQL语句

5.3 ListView控件

5.3.1 ListView控件的使用

当一个页面中,需要展示多个条目时,且这些条目的布局相同,那么Android中提供了一个控件

来解决这个问题,它就是ListView控件。以下是ListView在布局文件中的代码片段:

<ListView

 android:id=”@+id/lvListView”

 android:layout_width=”match_parent”

 android:layout_height=”match_parent”/>

ListView是一个列表视图,由很多Item条目组件,每个Item条目的布局相同,

注意一定要为ListView定义一个id属性,才会在图形化视图中看到效果。


常用数据适配器

ListView是一个列表视图,但没有数据显示是没有意义的,Android提供一个适配器Adapter对

ListView进行数据适配,即可以将适配器理解为数据填充器或数据绑定器,为ListView列表视图

提供用于显示的数据。List数据-à适配器àListView/GridView/Spinner等

1——BaseAdapter:是抽象类,最基本的数据适配器,填充器,绑定器,通常要继承该类,重写方法

 getCount():得到条目Item的总数

 getView():得到相应postion对应的条目Item视图,postion当前条目Item的位置,从0开始

 getItem():根据postion得到某个条目Item,可省

 getItemId():根据position得到某个条目Item的id号,可省

2——ArrayAdapter:是BaseAdapter是子类

 ArrayAdapter(Context context,int resource,int textViewResourceId,T[] objects):

 参数一:Context对象,一个Android应用一个Context对象,表示该应用的全局环境对象

 参数二:条目Item布局的资源id

 参数三:条目Item布局中相应TextView控件的id

 参数四:需要适配/填充/绑定的数据,数组类型

 注意:只限于Item布局中是TextView的控件

3——SimpleAdapter:是BaseAdapter是子类

 SimpleAdapter (Context context,Map<List>,int resource,String[],int[]):

 参数一:Context对象,一个Android应用一个Context对象,表示该应用的全局环境对象

 参数二:为所有Item布局填充的值

 参数三:条目Item布局的id

 参数四:Map集合中的key,例如:new String[]{“photo”,”name”}

 参数五:Item布局相应控件的id,例如:new int[]{R.id.photoImageView,R.id.nameTextView},

 与参数四的key一一对应,不能错位

 注意:只限于Item布局中是TextView,ImageView,或实现了Checkable接口的的控件,例如

CheckBox控件就实现了Checkable接口,所有它的作用范围也有限,但比ArrayAdapter

较好一些。