您的位置:华清远见教育科技集团 >> 新闻动态 >> Android资料 >> Android开发之手动建立SQLite数据库  
 
Android开发之手动建立SQLite数据库
分享到:

手动建立数据库

手动建立数据库就是利用sqlite3工具,通过手工输入SQL命令来完成建立数据库的过程。这里来介绍一下sqlite3。sqlite3是SQLite数据库自带的一个SQL命令执行工具,它基于命令行,并可以显示命令执行结果。sqlite3工具是被集成在Android系统中的,用户在Linux的命令行界面中输入sqlite3即可启动sqlite3工具,并得到工具的版本信息,如代码清单7-21所示。

代码清单7-21 启动sqlite3工具


# sqlite3
    SQLite version
    Enter ".help " for instructions
    sqlite>

注意:启动Linux的命令行界面的方法是在模拟器已经启动的前提下,在CMD中输入adb shell命令。

由上段代码可以看出,在启动sqlite3工具后,提示符从“#”变为“sqlite>”,表示命令行界面已经进入与SQLite数据库的交互模式,此时可以输入命令对数据库的内容进行建立、删除或修改。而正确退出sqlite3工具的方法是使用.exit命令。

代码清单7-22 退出sqlite3工具


sqlite> .exit
    #

原则上,每个应用程序的数据库都保存在各自的/data/data//databases目录下,但如果使用手工方式建立数据库,则必须手工建立数据库目录,目前版本无须修改数据库目录的权限。

在SQLite数据库中,每个数据库保存在一个独立的文件中,使用sqlite3工具后加文件名的方式打开数据库文件,如果指定文件不存在,sqlite3工具则自动创建新文件。

代码清单7-23所示的代码将创建名为people的数据库,在文件系统中将产生一个名为people.db的数据库文件。

代码清单7-23 创建名为people的数据库


# sqlite3 people.db
    SQLite version
    Enter ".help " for instructions
    sqlite>

代码清单7-24所示的代码在新创建的数据库中,构造了一个名为peopleinfo的表,使用create table命令,关系模式为peopleinfo ( _id, name, age, height)。表包含4个属性,_id是整型的主键;name表示姓名,数据类型为字符型,not null表示这个属性一定要填写,不可以为空值;age表示年龄,数据类型为整数型;height表示身高,数据类型为浮点型。

代码清单7-24 创建名为peopleinfo的表


sqlite> create table peopleinfo
    ...> (_id integer primary key autoincrement,
    ...> name text not null,
    ...> age integer,
    ...> height float);
    sqlite>

为了确认数据表是否创建成功,可以使用.tables命令,显示当前数据库中的所有表。从代码清单7-25所示的代码中可以观察到,当前数据库仅有一个名为peopleinfo的表。

代码清单7-25 查看数据库中表情况


sqlite> .tables
    peopleinfo
    sqlite>

当然,也可以使用.schema命令查看建立表时使用的SQL命令。如果当前数据库中包含多个表,则可以使用[.schema 表名]的形式,显示指定表的建立命令,如代码清单7-26所示。

代码清单7-26 查看数据库中指定表的建立命令


sqlite>.schema
    CREATE TABLE peopleinfo (_id integer primary key autoincrement,
    name text not null, age integer, height float);
    sqlite>

向peopleinfo表中添加数据,使用insert into … values命令,如代码清单7-27所示。

代码清单7-27 向peopleinfo表中添加数据


sqlite> insert into peopleinfo values(null,'Tom',21,1.81);
    sqlite> insert into peopleinfo values(null,'Jim',22,1.78);
    sqlite> insert into peopleinfo values(null,'Lily',19,1.68);
    sqlite> insert into peopleinfo values(null,'Lucy',21,1.68);
    sqlite> insert into peopleinfo values(null,'John',21,1.86);

代码运行成功后,数据库的peopleinfo表将有3条数据。因为_id是自增加的主键,因此在输入null后,SQLite数据库会自动填写该项的内容。终得到的表数据如表7-4所示。

表7-4 peopleinfo表数据

 _id  name  age  height
 1  Tom  21  1.81
 2  Jim  22  1.78
 3  Lily  19  1.68
 4  Lucy  21  1.68
 5  John  21  1.86

在数据添加完毕后,使用select命令,显示指定数据表中的所有数据信息,命令格式为[select 属性 from 表名]。代码清单7-28所示的代码用来显示peopleinfo表的所有数据。

代码清单7-28 显示peopleinfo表的所有数据


select * from peopleinfo;
    1|Tom|21|1.81
    2|Jim|22|1.78
    3|Lily|19|1.68
    4|Lucy|21|1.68
    5|John|21|1.86
    sqlite>

上面的查询结果看起来不是非常直观,可以使用mode命令将结果输出格式更改为“表格”方式。

代码清单7-29 以表格格式显示peopleinfo表的所有数据


sqlite> .mode column
    sqlite> select * from peopleinfo;
    1        Tom         21        1.81
    2        Jim         22        1.78
    3        Lily        19        1.68
    4        Lucy        21        1.68
    5        John        21        1.86
    sqlite>

注意:

mode命令除了支持常见的column格式外,还支持csv格式、html格式、insert格式、line格式、list格式、tabs格式和tcl格式。

更新数据可以使用update命令,命令格式为[update 表名 set 属性=“新值” where 条件]。更新数据后,同样使用select命令显示数据,则可以确定数据是否正确更新。

代码清单7-30所示的代码将姓名为Lily数据中的高度值更新为1.88。

代码清单7-30 以表格格式显示peopleinfo表更新后的数据


sqlite> update peopleinfo set height=1.88 where name='Lily';
    sqlite> select * from peopleinfo;
    select * from peopleinfo;
    1        Tom         21        1.81
    2        Jim         22        1.78
    3        Lily        19        1.68
    4        Lucy        21        1.68
    5        John        21        1.86
    sqlite>

删除数据可以使用delete命令,命令格式为[delete from 表名where 条件]。代码清单7-31所示的代码将_id为3的数据从表peopleinfo中删除。

代码清单7-31 删除数据


sqlite> delete from peopleinfo where _id=3;
    sqlite> select * from peopleinfo;
    select * from peopleinfo;
    1        Tom         21        1.81
    2        Jim         22        1.78
    4        Lucy        21        1.68
    5        John        21        1.86
    sqlite>

sqlite3除了支持上述提到的增删改查的数据库操作外,对于复杂的查询,例如,order by、group by,sum、count类的聚合函数等也支持。如代码清单7-32、7-33所示。

代码清单7-32 order by


sqlite> select * from peopleinfo order by height;
    select * from peopleinfo order by height;
    4        Lucy        21        1.68
    2        Jim         22        1.78
    1        Tom         21        1.81
    5        John        21        1.86
    sqlite>

代码清单7-33 group by、count


sqlite> select age,count(_id) as count from peopleinfo group by age having count(_id)>1;
    select * from peopleinfo order by height;
    21        3
    sqlite>

sqlite3工具还支持大量的命令,可以使用.help命令查询sqlite3的命令列表。以下简单介绍几种命令,如表7-5所示。

表7-5 Sqlite3支持命令

编号 命令 说明
1 .bail ON|OFF 遇到错误时停止,默认为OFF
2 .databases 显示数据库名称和文件位置
3 .dump ?TABLE? ... 将数据库以SQL文本形式导出
4 .echo ON|OFF 开启和关闭回显
5 .exit 退出
6 .explain ON|OFF 开启或关闭适当输出模式,如果开启模式更改为column,并自动设置宽度
7 .header(s) ON|OFF 开启或关闭标题显示
8 .help 显示帮助信息
9 .import FILE TABLE 将数据从文件导入表中
10 .indices TABLE 显示表中所有列名
11 .load FILE ?ENTRY? 导入扩展库
12 .mode MODE ?TABLE? 设置输入格式
13 .nullvalue STRING 打印时使用STRING代替NULL
14 .output FILENAME 将输入保存到文件
15 .output stdout 将输入显示在屏幕上
16 .prompt MAIN CONTINUE 替换标准提示符
17 .quit 退出
18 .read FILENAME 在文件中执行SQL语句
19 .schema ?TABLE? 显示表的创建语句
20 .separator STRING 更改输入和导入的分隔符
21 .show 显示当前设置变量值
22 .tables ?PATTERN? 显示符合匹配模式的表名
23 .timeout MS 尝试打开被锁定的表ms(毫秒)
24 .timer ON|OFF 开启或关闭CPU计时器
25 .width NUM NUM ... 设置column模式的宽度
 更多相关文章

·Android开发之SQLite数据库简介
·Android开发之代码建库(SQLiteOpenHelper)
·Android开发之使用数据提供者
·Android开发之SharedPreferences数据存储方式
·Android开发之使用Intent发送广播消息