Android数据库高手秘籍(一)——SQLite命令
要想熟练地操作任何一个数据库,最最基本的要求就是要懂 SQL 语言,这也是每个程序员都应该掌握的技能。
转载请注明出处:blog.csdn.net/guolin_blog… (opens new window)
# 前言
要想熟练地操作任何一个数据库,最最基本的要求就是要懂 SQL 语言,这也是每个程序员都应该掌握的技能。虽说 SQL 博大精深,要想精通确实很难,但最基本的一些建表命令,增删改查,大家还是必须要学会的。
# 认识SQL
SQL(Structured Query Language) 是一种标准的数据库查询语言,即所有的关系型数据库都会支持它,只不过每种数据库对 SQL 语言的支持与标准存在着细微的不同。我们无须关心其它数据库对 SQL 语言的支持情况,这里我们只要把重点放在 SQLite 上就可以了。下面我将使用模拟器来对 SQLite 支持的各种命令进行演示,如果你想用手机的话也可以,但要确保你的手机已经 Root,并且包含 sqlite3 这个命令文件。
# 走进SQL
首先确保模拟器已经连接上了电脑,然后在命令行输入 adb shell 进入控制台,如下图所示:
注意 #符号表示我们当前已经是超级用户了,如果显示的是 $ 符号,表示当前只是普通用户而已,这时还需要输入 su 命令切换一下用户身份才行。
有了超级用户权限之后,我们能做的事情就很多了,这里我们先查看一下系统自带的联系人表吧。进入到 / data/data 目录下,如下图所示:
所有应用程序的本地存储文件都是存放在这个目录下面的。为了要让不同应用程序之间的数据容易区别开来,Android 是使用应用程序包名进行分开管理,也就是说每个应用程序的本地存储文件都会存放在自己应用程序包名的那个目录下,这里我们 ls 一下看看有多少子目录:
OK,确实有很多,毕竟手机上所有的应用程序都在这里。其中,com.android.providers.contacts 中存放的就是联系人的相关数据,我们进入到这个目录再 ls 一下:
可以看到,目前有 databases、files、lib 和 shared_prefs 这几个子目录。其中 databases 肯定是用于存放数据库文件的,files 是用于存放普通文本文件的,lib 是用于存放 so 库的,shared_prefs 则是用于存放 shared 文件的。这是 Android 数据持久化的几种可选方式,对这部分内容不太了解的朋友可以参考《第一行代码——Android》 (opens new window)的第六章。
接着进入到 databases 目录中,再 ls:
其中后缀名为 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 数据库中更多的奥秘。
作者:郭霖 链接:https://juejin.cn/post/6988018164126711815 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。