转载请注明出处:https://blog.youkuaiyun.com/turtlejj/article/details/105015349,谢谢~
最近在工作中,看到有一部分同事,在查看Android应用程序的数据库文件时,都要先通过adb pull命令,把db文件从手机拷贝到电脑端,再通过一些软件打开查看。这种方式虽然没有什么问题,但在执行某些操作后,数据库发生变化,如果想再次查看,又要再执行一次adb pull操作,很麻烦。
其实,我们完全可以通过adb shell,使用sqlite3这个命令行工具,来查看我们db文件中的表、表结构以及表中存储的数据。
本篇文章,既是我给自己写的一份备忘,也希望能为不熟悉sqlite3工具的同学提供一份命令速查手册,方便大家在使用的时候,不用再去各个地方查找资料。
当然,由于篇幅原因,我们这里并不会列出sqlite3的所有命令,但对于Android应用的开发和调试来说,完全可以满足。
一、Android应用程序的database目录
Android应用程序,如果需要使用数据库来对数据进行持久化,一定会在应用的目录下生成一个database文件夹,用以存放db文件,如下所示。
其中,.db文件,为应用程序进行数据持久化的数据库文件;而.db-journal文件,则是系统自动生成的日志文件,用于数据库在进行事务时的回滚操作,一般情况下,该文件的大小为0。
pixel:/data/data/com.example.demo/databases # ls -al
total 60
drwxrwx--x 2 u0_a215 u0_a215 4096 2020-03-14 10:25 .
drwx------ 6 u0_a215 u0_a215 4096 2020-03-14 10:25 ..
-rw-rw---- 1 u0_a215 u0_a215 49152 2020-03-14 10:40 demo.db
-rw-rw---- 1 u0_a215 u0_a215 0 2020-03-14 10:40 demo.db-journal
二、使用sqlite3打开db文件
使用sqlite3打开db文件时,可以指定打开的方式为“可写模式”或“只读模式”。(某些旧版本的sqlite3可能没有readonly选项)
# 可写模式打开db文件
pixel:/data/data/com.example.demo/databases # sqlite3 demo.db
SQLite version 3.28.0 2019-04-16 19:49:53
Enter ".help" for usage hints.
sqlite>
# 只读模式打开db文件
pixel:/data/data/com.example.demo/databases # sqlite3 -readonly demo.db
SQLite version 3.28.0 2019-04-16 19:49:53
Enter ".help" for usage hints.
sqlite>
三、退出sqlite3模式
退出sqlite3有三种方式,我们这里比较推荐前两种
# 使用".exit"
sqlite>.exit
pixel:/data/data/com.example.demo/databases #
# 使用".quit"命令
sqlite>.quit
pixel:/data/data/com.example.demo/databases #
// 连续按三次"Ctrl + C"
sqlite> ^C^C^C
pixel:/data/data/com.example.demo/databases #
四、sqlite3的几种显示模式
sqlite3在显示数据时,有10种模式,如下所示。
sqlite> .mode mode_name
mode_name list:
ascii Columns/rows delimited by 0x1F and 0x1E # 以ASCII码显示,可能会是乱码
csv Comma-separated values # 以"逗号"分隔
column Left-aligned columns. (See .width) # 以左对齐方式显示
html HTML <table> code # 以html格式显示
insert SQL insert statements for TABLE # 以SQL语句形式展示数据是如何插入的
line One value per line # 单行显示,并显示每个值的变量名
list Values delimited by "|" # 以"|"分隔,这是sqlite3的默认模式
quote Escape answers as for SQL # 类似"insert"模式,但该