要想熟练地操做任何一个数据库,最最基本的要求就是要懂SQL语言,这也是每一个程序员都应该掌握的技能。虽然说SQL博大精深,要想精通确实很难,但最基本的一些建表命令,增删改查,你们仍是必需要学会的。android
SQL(Structured Query Language)是一种标准的数据库查询语言,即全部的关系型数据库都会支持它,只不过每种数据库对SQL语言的支持与标准存在着细微的不一样。咱们无须 关心其它数据库对SQL语言的支持状况,这里咱们只要把重点放在SQLite上就能够了。下面我将使用模拟器来对SQLite支持的各类命令进行演示,如 果你想用手机的话也能够,但要确保你的手机已经Root,而且包含sqlite3这个命令文件。程序员
首先确保模拟器已经链接上了电脑,而后在命令行输入adb shell进入控制台,以下图所示:sql
注意#符号表示咱们当前已是超级用户了,若是显示的是$符号,表示当前只是普通用户而已,这时还须要输入su命令切换一下用户身份才行。shell
有了超级用户权限以后,咱们能作的事情就不少了,这里咱们先查看一下系统自带的联系人表吧。进入到/data/data目录下,以下图所示:数据库
全部应用程序的本地存储文件都是存放在这个目录下面的。为了要让不一样应用程序之间的数据容易区别开来,Android是使用应用程序包名进行分开管理,也就是说每一个应用程序的本地存储文件都会存放在本身应用程序包名的那个目录下,这里咱们ls一下看看有多少子目录:数据结构
OK,确实有不少,毕竟手机上全部的应用程序都在这里。其中,com.android.providers.contacts中存放的就是联系人的相关数据,咱们进入到这个目录再ls一下:ide
可 以看到,目前有databases、files、lib和shared_prefs这几个子目录。其中databases确定是用于存放数据库文件 的,files是用于存放普通文本文件的,lib是用于存放so库的,shared_prefs则是用于存放shared文件的。这是Android数据 持久化的几种可选方式,对这部份内容不太了解的朋友能够参考《第一行代码——Android》的第六章。学习
接着进入到databases目录中,再ls:.net
其中后缀名为journal的文件是日志文件,咱们不用管,contacts2.db和profile.db才是真正的数据库文件,可使用sqlite3命令来打开数据库,以下图所示:命令行
好的,数据库已经打开了,那么咱们怎么才能知道当前数据库中有哪些表呢?很简单,.table命令就能够作到了:
哇, 居然有这么多张表!是的,联系人的数据结构很是复杂,不少的数据都是分表存储的。这里咱们随便挑一张表,好比说accounts表,若是我想知道这张表中 有哪些列应该怎么办呢?在MySQL中可使用desc accounts这个命令,但SQLite却不认识这个命令,毕竟它们是有差别化的。 SQLite中可使用pragma table_info(TABLE_NAME)这个命令来查看表的数据结构,以下图所示:
可 以看到,一共显示了三条结果,表示accounts表中共有三列。可是,全部的字段都缩在了一行里面,并用“|”符号分隔,这样咱们很难看出每一个字段的含 义。很简单,只须要换一种显示模式就好了,好比说line模式就挺不错的。输入.mode line命令切换显示模式,而后从新运行pragma命令,结果以下图所示:
怎 么样,这样就清晰多了吧?这三列的列名分别是account_name、account_type和data_set,数据类型都是TEXT(字符串), 容许为空,而且都不是主键。好,那我如今想查一查accounts表中的数据呢?这就太简单了,使用select语句就能够了,以下所示:
恩?怎么只有一条空数据啊。貌似模拟器上默认就是这样的,若是你用的是手机的话,这里应该就能够查到真正的数据了。不过不要紧,咱们能够在设置里面手动添加一个邮箱帐户,以下图所示:
如今再来从新查询一遍accounts表,以下所示:
OK,添加的新帐户已经成功查出来了。
除 了查询命令以外,还有其它的增删改命令都和标准的SQL语法是相同的,即insert、delete和update,因为比较简单,我就再也不赘述了。比较 值得一提的是,每一个SQLite数据库中都还有一个隐藏的sqlite_master表,这里记载了当前数据库中全部表的建表语句,可使用select * from sqlite_master命令进行查看:
结果太多了是否是?一屏根本就显示不下嘛。不要着急,别忘了咱们使用的是select命令,可使用where语句来过滤出咱们想要查询的那部份内容,以下图所示:
OK,CREATE TABLE accounts (account_name TEXT, account_type TEXT, data_set TEXT) 这就是accounts表的建表语句了,经过这种方式咱们能够查询到任意一张表的建表语句,从而对咱们学习和分析数据库表结构有所帮助。
有 些朋友可能会以为,每次都要输入select命令来查询表中的数据太麻烦了。没错,并且还要保证手机是链接在电脑上的时候才能查询,确实太不方便。幸运的 是,有些手机软件已经提供了数据库表查询的功能,使得咱们随时随地均可以方便地查看数据库中的数据,好比Root Explorer这款软件就不错。
仍 然是确保你的手机已经Root,而后安装Root Explorer,打开软件以后按照咱们前面介绍的路径,进入/data/data/com.android.providers.contacts /databases,点击contacts2.db数据库,选择内置数据库查看器,而后随便点击一张表就能够查看到里面的数据了,以下图所示:
使用这种方法,咱们能够随时查看数据库表中的最新数据,直观又方便,在程序开发的时候能够起到很是大的帮助。
好了,今天的讲解就到这里,下篇文章当中我将带领你们探究Android数据库中更多的奥秘。感兴趣的朋友请继续阅读 Android数据库高手秘籍(二)——建立表和LitePal的基本用法