每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库 --大名鼎鼎的SQLite。SQLite是一款轻量级数据库,它的设计目的是嵌入式,而且它占用的资源非常少,在嵌入式设备中,可能只需要几百KB,这也是 Android 系统采用 SQLite 数据库的原因之一吧。

简介

  • 轻量级
    使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
  • 独立性
    SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
  • 隔离性
    SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
  • 跨平台
    SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android。
  • 多语言接口
    SQLite 数据库支持多语言编程接口。
  • 安全性

  • SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。
  • Sqlite数据库管理工具
    在学习一种新技术之前,首先要做的是在自己的计算机上安装可以操作这种技术的工具。当然,这也非常符合一句成语:功欲善其事,必先利其器。虽然使用好的工具并不能使自己更好地掌握这种技术,但却能使我们的工作效率大大提升。
    言归正传,现在先看看官方为我们提供了什么工具来操作Sqlite数据库。进入官方的下载页面,网址如下:
    http://www.sqlite.org/download.html
    在下载页面中找到Windows版的二进制下载包。在作者写作本书时,Sqlite的最新版本是Sqlite3.6.2。因此,要下载的文件是Sqlite-3_6_20.zip。将这个zip文件解压,发现在解压目录中只有1个文件:sqlite3.exe。对,这个文件就是操作Sqlite数据库的工具(是不是很轻量?连工具都只有一个)。它是一个命令行程序,运行这个程序,进入操作界面,如图6.15所示。


    在控制台中可以输入SQL语句或控制台命令。所有的SQL语句后面必须以分号(;)结尾。控制台命令必须以实心点(.)开头,例如,.help(显示帮助信息);.quit(退出控制台);.tables(显示当前数据库中所有表名)。
    虽然可以在Sqlite的控制台中输入SQL语句来操作数据库,但输入大量的命令会使工作量大大增加。因此,我们必须要使用所谓的“利器”来取代这个控制台程序。
    由于Sqlite提供了各种类型的程序接口,因此,可以管理Sqlite数据库的工具非常多,下面是几个比较常用的Sqlite管理工具。
    SQLite Database Browser
    http://sourceforge.net/projects/sqlitebrowser
    SQLite Expert Professional
    http://www.sqliteexpert.com
    Sqlite Developer
    http://www.sqlitedeveloper.com
    sqliteSpy
    http://www.softpedia.com/progDownload/SQLiteSpy-Download-107386.html

    推荐一个FireFox 插件--SQLite Manager

    l,这也是作者推荐使用的Sqlite管理工具。
  • 官方地址:http://code.google.com/p/sqlite-manager/
  • 在firefox里:

  • 该工具拥有大量的可视化功能,例如,建立数据库、建立表、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;

更多相关文章

  1. Android(安卓)连接服务器 获取数据
  2. Android开发 数据库操作
  3. android中的数据库操作
  4. android Sqlite多线程访问异常解决方案
  5. 如何在Android设备中用NDK编译SQLite并且对SQLite进行操作(增删)-H
  6. Android查询短信数据库 查询联系人数据库
  7. Android(安卓)技巧:命令行运行 sqlite3
  8. android Sqlite多线程访问异常解决方案
  9. android通过php连接mysql数据库!!!!

随机推荐

  1. Android(安卓)适配18:9全面屏
  2. android wifi 点对点传输
  3. RN不用启动Android(安卓)Studio用命令行
  4. UIStackView
  5. Android(安卓)常用的性能分析工具详解:GPU
  6. Android(安卓)有些机型hint不显示
  7. Android(安卓)ConstraintLayout 约束布局
  8. Android(安卓)基础常见记录
  9. android中在代码中创建应用的快捷图标
  10. Android(安卓)实现永久保存数据的方法详