转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38121557
SQLite简介
上一篇博文我们学习了Android几种简单的数据存储方式,SharedPreference存储和文件存储(其中又分为外部设备文件存储和内部设备文件存储),这些数据存储方式可以满足我们日常开发中存储少量数据的需求。那么,如果使用它们存储一些数据量较大并且逻辑关系较为复杂的数据集,它们便显得较为笨拙和效率低下。那有没有更好的存储方案来解决此类问题呢,还是只能选择忍受?放心,窝在Google的那一帮技术大牛早就考虑到这个问题,他们的解决方案是:为Android系统内置轻便又功能强大的嵌入式数据库--SQLite。今天我们将会深入地学习如何在Android中使用SQLite数据库存储数据,那在学习使用SQLite之前,我们现在简单了解一下SQLite数据库的特点。
SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎,它是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且由于其占用资源低(占用内存只需几百K)、处理速度快等特点,目前许多嵌入式产品中都使用了它,其中就包括大名鼎鼎的iOS和Android移动操作系统。SQLite能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月, 至今已经有14个年头,现在SQLite也迎来了一个版本 SQLite 3已经发布。SQLite的特点大致总结如下:
1.轻量级
使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
2.独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
3.隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
4.跨平台
SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android和IOS。
5.多语言接口
SQLite 数据库支持多语言编程接口。
6.安全性
SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。
使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
2.独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
3.隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
4.跨平台
SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android和IOS。
5.多语言接口
SQLite 数据库支持多语言编程接口。
6.安全性
SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。
要想了解更多有关SQLite数据库相关的历史、特点及命令操作,可以学习以下两个网站的资源:
在Android中使用SQLite实例
简单地了解了一下SQLite数据库后,我们再来学习一下如何在Android中编写应用程序来使用SQLite执行数据的CRUD操作。我们通过一个例子来完成我们的学习任务:大致要实现的功能就是将一些Person个人信息从SQLite数据库中的person表中查询出来并以列表的形式展现,然后可以对列表中的person信息进行修改和删除,并可以添加新的person信息数据库中。我们编写的程序列表及包图如下:
由于该例子中的类较多,且类和类之间的关系有点复杂,在这里我画一张简单的类图关系图,方便读者理解和学习。在这里特别声明一下,由于篇幅关系,不是每个类中的方法都在类图中声明了,具体的还要看Demo实例中的代码为准,我们主要是为了理清一下类与类之间的关系。类图图示如下:
整理好思路后,接下来我们来看下每个类中的具体代码是如何编写的。
那在实际的开发中,为了让我们更好的管理和维护SQLite数据库,Android提供了一个SQLiteOpenHelper类。我们需要定义一个继承自
SQLiteOpenHelper的子类(在实例中为DatabaseOpenHelper类),并在此类中重写onCreate()和onUpgrade()方法。下图列出了SQLiteOpenHelper所提供的一些方法和方法说明:
/**
* 构造方法,一般是传递一个要创建的数据库名称那么参数
*/
public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version,
DatabaseErrorHandler errorHandler)
/**
* 创建数据库时调用
*/
public void onCreat