每一个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操做系统无关的SQL数据库 --大名鼎鼎的SQLite。SQLite是一款轻量级数据库,它的设计目的是嵌入式,并且它占用的资源很是少,在嵌入式设备中,可能只须要几百KB,这也是 Android 系统采用 SQLite 数据库的缘由之一吧。html
简介sql
- 轻量级
使用 SQLite 只须要带一个动态库,就能够享受它的所有功能,并且那个动态库的尺寸想当小。
- 独立性
SQLite 数据库的核心引擎不须要依赖第三方软件,也不须要所谓的“安装”。
- 隔离性
SQLite 数据库中全部的信息(好比表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
- 跨平台
SQLite 目前支持大部分操做系统,不至电脑操做系统更在众多的手机系统也是可以运行,好比:Android。
- 多语言接口
SQLite 数据库支持多语言编程接口。
- 安全性
- 该工具拥有大量的可视化功能,例如,创建数据库、创建表、SQL Builder等工具。图6.16是SQLite ExpertProfessional的主界面。
建立数据库和表 使用SQLite控制台工具(sqlite3.exe)创建数据库很是简单,只须要输入以下的命令就能够创建或打开数据库。 sqlite3.exe test.db 若是数据库(test.db)存在,则打开该数据库,若是数据库不存在,则预创建test.db文件(这时并不生成test.db文件,直到在Sqlite控制台中执行与数据库组件(表、视图、触发器等)相关的命令或SQL语句才建立test.db文件。 若是想使用sqlite.exe命令同时创建数据库和表,能够先创建一个sql.script文件(也能够是其余文件名),并在其中输入以下的SQL语句: create table table1 ( id integerprimary key, age int, name text ); create table table2( idinteger primary key, type_idinteger, name text ); 而后执行以下的命令,就会在创建test.db文件的同时,在该test.db文件中创建table1和table2两个表。 sqlite3.exe test.db < sql.script 在使用createtable语句建立表时还能够为每个字段指定默认值,以下面的SQL语句所示: create table table1 ( id integerprimary key, age int default 20, name text ); create table table2( id integerprimary key, type_idinteger, name text default 'name1' ); 模糊查询 Sqlite的模糊查询与其余数据库相似,都使用了like关键字和%通配符。不过Sqlite在处理中文时会遇到一些麻烦。例如,使用下面的SQL语句向table2插入了一条记录。 insert into table2(id, type_id, name) values(1, 20,'手机操做系统'); 在Sqlite控制台中使用以下的SQL查询是没有问题的。 select * from table2 where name = '手机操做系统'; 但若是使用下面的模糊查询语句,则没法查询到记录。 select * from table2 where name like '手机%'; 发生这种事情的缘由是由于Sqlite控制台在保存中文时使用的编码格式是GB2312,而执行like操做时使用的是UTF-8。读者可使用以下的命令来查看Sqlite控制台当前的编码格式。 PRAGMA encoding; 为了可使用like模糊查询中文,做者建议使用6.4.1节介绍的SQLite Expert Professional来执行insert、update等SQL语句来编辑数据。在这个工具中会直接使用UTF-8来保存中文。 分页显示记录 分页是在Web应用中常常被提到的概念。基本原理是从数据库中得到查询结果的部分数据,而后显示在页面中。虽然本书并无介绍Web程序的开发,但得到查询结果的部分数据仍然很是重要。 Sqlite和MySQL相同,都使用了limit关键字来限制select语句返回的记录数。limit须要两个参数,第1个参数表示返回的子记录集在父记录集的开始位置(从0开始),第2个参数表示返回子记录集的记录数。第2个参数为可选值,若是不指定这个参数,会得到从起始位置开始日后的全部记录。例如,下面的select语句返回了table2表中从第11条记录开始的100条记录。 select * from table2 limit 10,100 事务 若是一次执行多条修改记录(insert、update等)的SQL语句,那么当某一条SQL语句执行失败时,就须要取消其余SQL语句对记录的修改。不然就会形成数据不一致的状况。而事务是解决这个问题的最佳方法。 在Sqlite中可使用BEGIN来开始一个事件,例如,下面的代码执行了两条SQL语句,若是第2条语句执行失败,那么第1条SQL语句执行的结果就会回滚,至关于没执行这条SQL语句。 BEGIN; insert into table1(id, name) values(50,'Android'); insert into table2(id, name) values(1, '测试'); 若是想显式地回滚记录的修改结果,可使用ROLLBACK语句,代码以下: BEGIN; delete from table2; ROLLBACK; 若是想显式地提交记录的修改结果,可使用COMMIT语句,代码以下: BEGIN; delete from table2; COMMIT;