如何在Android Studio中使用ADB查看SQLite数据库

89

我需要查看我的SQLite数据库,但不知道如何操作。我已经访问了http://www.sqlite.org/download.html并下载了适用于我的操作系统的命令行shell,但当我运行程序并键入adb ...时,出现错误。

注意:我正在使用Android Studio,因此我认为无需安装其他任何东西,因为我记得Android Studio已经包含所有所需的SDK工具。

7个回答

177

最简单的方法:通过ADB Shell连接到Sqlite3

我没有在Android Studio中找到任何方法来实现这一点,但是我使用远程shell访问数据库,而不是每次都拉取文件。

在此处查找所有信息: http://developer.android.com/tools/help/sqlite3.html

1- 在命令提示符中进入您的platform-tools文件夹

2- 输入命令 adb devices 以获取您的设备列表

C:\Android\adt-bundle-windows-x86_64\sdk\platform-tools>adb devices
List of devices attached
emulator-xxxx   device

3- 连接您的设备到shell:

C:\Android\adt-bundle-windows-x86_64\sdk\platform-tools>adb -s emulator-xxxx shell

4a- 如果您的设备已经root,您可以跳过此步骤

run-as <your-package-name> 

4b- 转到包含您的db文件的文件夹:

cd data/data/<your-package-name>/databases/

5- 运行sqlite3连接到您的数据库:

sqlite3 <your-db-name>.db

6- 运行您喜欢的sqlite3命令,例如:

Select * from table1 where ...;

SQLite抽屉单

查看SQLite数据库中的表需要几个步骤:

  1. 列出数据库中的表:

    .tables
    
  2. 列出表格的外观:

  3. .schema tablename
    
    打印整个表格:
    SELECT * FROM tablename;
    
    列出所有可用的 SQLite 提示符命令:
    .help
    

1
这个方法需要root权限吗? - tomislav2012
1
@tomislav2012,是的,因为您要进入/data/data目录。 - Dheeraj Bhaskar
1
我的运行Android 4.1的HTC One S上无法识别sqlite3命令。 - Alex
@Alex 我建议你找到 sqlite3 并尝试安装,使用它来开发会更简单。 - Dheeraj Bhaskar
1
谢谢。如果您想将sqlite文件传输到计算机桌面,您可以首先使用命令cp /data/data/<your-package-name>/databases/<your-db-name>.db /sdcard。然后,使用像Explorer这样的文件管理器将文件发送到您的电子邮件。 :) - Cheok Yan Cheng
显示剩余2条评论

76
最简单的方法是使用Android设备监视器获取数据库文件,再使用SQLite DataBase Browser查看该文件,同时仍然在Android Studio中编写Android程序。
1)在Android Studio中使用模拟器运行和启动数据库应用程序。(我插入了一些数据来验证)
2)运行Android Device Monitor。如何运行?;转到[your_folder] > sdk >tools。您可以在该文件夹中看到monitor.bat文件。在文件夹内部按住shift键并右键单击,然后选择“在此处打开命令窗口”。这个操作将启动命令提示符。输入monitor,Android Device Monitor将被启动。
3)选择您当前正在运行的模拟器。然后进入data>data>[your_app_name]>databases 4)点击图标(位于右上角)(将光标悬停在图标上,您将看到“从设备中提取文件”),然后将其保存在任何您喜欢的位置
5)启动SQLite DataBase Browser。将刚保存的文件拖放到该浏览器中。
6)进入Browse Data选项卡并选择要查看的表格。

9
我认为你无法从设备监视器中打开数据目录,至少我无法做到。 - Estevex
6
非root设备无法打开数据目录,但模拟器可以访问。 - Tad
3
非Root设备如何打开数据? - Sujith S Manjavana
4
在模拟器运行时,你可以使用 adb 从模拟的 Android 设备下载文件。例如:adb pull /data/data/com.yourpackagename.here/databases/yourdbfile.db - Baker
我认为@SujithManjavana所说的只是在客户操作系统中的模拟器路径中打开sqlite数据库,而不是在复制回主机操作系统后再打开。 - Pradeep Sanjaya

16
你遇到的问题常见并且在文档中没有很好地解释。普通设备不包含sqlite3数据库二进制文件,这就是为什么你会收到错误信息的原因。Android模拟器、OSX、Linux(如果已安装)和Windows(安装后)都有该二进制文件,因此你可以在本地电脑上打开数据库。
解决方法是将数据库从设备复制到本地电脑。这可以通过ADB完成,但需要进行一些步骤。
在开始之前,你需要一些信息:
- SDK的路径(如果未包含在操作系统环境中) - 你的,例如com.example.application - 将数据库放置到本地路径(),例如~/Desktop或%userprofile%\Desktop 接下来,你需要了解每个命令写入哪个终端。以下示例中第一个字符不会被键入,但可以让你知道我们在哪个shell中:
- > = 你的操作系统命令提示符 - $ = ADB shell命令提示符 - ! = 以管理员身份运行的ADB shell命令提示符 - %
然后,在终端或命令行中输入以下命令(不要输入括号或括号内的第一字符或文本):
> adb shell
$ su
! cp /data/data/<package name>/Databases/<database name> /sdcard
! exit
$ exit
> adb pull /sdcard/<database name> <local path>
> sqlite3 <local db path>
% .dump
% .exit  (to exit sqldb)

这是一种非常绕的方法将数据库复制到您的本地计算机并在本地读取数据库。有SO和其他资源解释如何从模拟器将sqlite3二进制文件安装到您的设备上,但对于一次性访问,此过程有效。

如果您需要交互式访问数据库,建议在模拟器中运行应用程序(已经安装了sqlite3),或者将sqlite安装到您设备的/xbin路径中,请参考 此链接


11
  1. 打开终端
  2. cd <ANDROID_SDK_PATH>(例如我在Windows上用 cd C:\Users\Willi\AppData\Local\Android\sdk
  3. cd platform-tools
  4. adb shell (如果只有一个模拟器在运行,则可以使用此命令)
  5. cd data/data
  6. su(获取超级用户权限)
  7. cd <PACKAGE_NAME>/databases
  8. sqlite3 <DB_NAME>
  9. 发出SQL语句(重要:在语句末尾加入;,否则该语句不会被执行,而是转到下一行)

注意:如果需要列出目录内容,请使用ls(Linux)或dir(Windows)。


9

你输入adb时它指的是什么?

step1. >adb shell
step2. >cd data/data
step3. >ls -l|grep "your app package here"
step4. >cd "your app package here"
step5. >sqlite3 xx.db

嗯...我不知道在哪里输入adb...当我在SQLite3 shell中输入它时,它会给我返回...>,并且期望一个命令的继续。它基本上在等待一个;。如果我键入分号,我会得到error: near "adb": syntax error...在命令提示符中键入adb shell告诉我adb不是一个已识别的命令...我应该将adb添加到我的路径文件中吗? - Terence Chow
首先,您需要进入adb shell(在Mac或Linux上,在终端中执行;在Windows上,在cmd中运行);然后在adb shell中执行sqlite3命令。 - log1000
1
我该如何在ADB shell中执行sqlite3命令?它显示“/system/bin/sh: sqlite3: not found”...而且我已经将SQLite3和ADB添加为路径变量了... - Terence Chow
你使用什么设备?希望这能给你一些提示。https://dev59.com/R3A65IYBdhLWcg3wxBmr - log1000

5

您可以通过将以下内容添加到 build.gradle 文件中,使用一个非常好的工具 Stetho

compile 'com.facebook.stetho:stetho:1.4.1'

在你的ApplicationActivityonCreate()方法中初始化它:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Stetho.initializeWithDefaults(this);
    setContentView(R.layout.activity_main);
}

然后您可以在Chrome浏览器的以下地址中查看db记录:

chrome://inspect/#devices

如果您想了解更多细节,请阅读我的文章:如何轻松查看您的数据库记录


4

根据设备的不同,您可能无法在adb shell中找到sqlite3命令。在这种情况下,您可能希望按照以下步骤操作:

adb shell

$ run-as package.name
$ cd ./databases/
$ ls -l #查找当前权限-r=4、w=2、x=1
$ chmod 666 ./dbname.db
$ exit
$ exit
adb pull /data/data/package.name/databases/dbname.db ~/Desktop/
adb push ~/Desktop/dbname.db /data/data/package.name/databases/dbname.db
adb shell
$ run-as package.name
$ chmod 660 ./databases/dbname.db #恢复原始权限
$ exit
$ exit

参考https://dev59.com/43I95IYBdhLWcg3w8y2N#17177091

在按照上述步骤后,有时候会遇到“远程对象未找到”的情况。那么,请在adb shell中将您的数据库文件夹权限更改为755。

$ chmod 755 databases/

但请注意,这仅适用于Android版本<21。


尝试过这种方法(从“adb shell”开始,然后执行“chmod”,然后执行数据库的“adb pull”),但是出现了“adb:错误:无法统计远程对象'/path/to/db':权限被拒绝”的错误。而“chmod 666”似乎起作用了(反正没有错误)。我以前曾经使用Android设备监视器成功地拉取过db文件,但是如果我现在尝试,甚至无法展开最初的“data”目录。我已经尝试过在运行和不运行模拟器窗口的情况下使用Android设备监视器,但结果相同。天啊,这太愚蠢了。 - clamum
作为一种新的黑客技巧,您可以使用stetho库来进行所有数据和网络监控。https://github.com/facebook/stetho - Nitesh Verma
嗯,我想我得使用Stetho了。我之前看到过它被推荐,但没意识到我可以用它来运行SQL查询,所以它对我很有用。我不再使用Chrome浏览器,但如果安装它可以让我检查和查询Android数据库,那我就会安装它。毕竟,使用Android设备监视器的方式并不是特别快速,你仍然需要将数据库拉出来然后在另一个应用程序中打开它。谢谢Nitesh。 - clamum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接