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


83

我需要查看我的SQLite数据库,但我不知道该怎么做。我已经转到http://www.sqlite.org/download.html并下载了适用于我的OS的命令行外壳程序,但是当我运行该程序并键入内容时,adb ...出现错误。

注意:我使用的是Android Studio,所以我假设不需要安装其他任何东西,因为我记得Android Studio说它具有所需的所有SDK工具。

Answers:


160

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

我在Android Studio中没有找到实现此目的的任何方法,但是我使用远程外壳程序访问数据库,而不是每次都提取文件。

在此处找到所有信息: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-将外壳连接到设备:

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

4a-您可以在有根设备上绕过此步骤

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. 列出表格的外观:

    .schema tablename
    
  3. 打印整个表:

    SELECT * FROM tablename;
    
  4. 列出所有可用的SQLite提示命令:

    .help
    

1
这种方法需要root吗?
tomislav2012

1
@ tomislav2012是的,因为您要进入/data/data目录
Dheeraj Bhaskar,

1
sqlite3的命令无法识别我的HTC个S运行Android 4.1
亚历克斯

@Alex我建议如果可能的话找到sqlite3并安装它,开发起来更简单
Dheeraj Bhaskar

1
谢谢。如果您希望将sqlite文件传输到计算机桌面,则可以先进行操作cp /data/data/<your-package-name>/databases/<your-db-name>.db /sdcard。然后,使用资源管理器之类的文件管理器将文件发送到您的电子邮件中。:)
Cheok Yan Cheng

76

对我来说,最简单的方法是使用Android设备监视器来获取数据库文件,并使用SQLite数据库浏览器来查看文件,同时仍然使用Android Studio对android进行编程。

1)使用Android Studio中的Android模拟器运行并启动数据库应用。(我向数据库应用插入了一些数据以进行验证)

2)运行Android设备监视器。如何运行?转到[your_folder] > sdk >tools。您可以在该文件夹中看到monitor.bat。shift + right click在文件夹中,然后选择“ Open command window here”。此操作将启动命令提示符。类型monitor,Android Device Monitor将会启动。

3)选择您当前正在运行的仿真器。然后去data>data>[your_app_name]>databases

4)单击图标(位于右上角)(将鼠标悬停在该图标上,您将看到“从设备中拉出文件”)并保存到您喜欢的任何位置

5)启动SQLite数据库浏览器。将刚刚保存的文件拖放到该浏览器中。

6)转到Browse Data选项卡,然后选择要查看的表。

在此处输入图片说明 在此处输入图片说明


9
我认为您无法从设备监视器打开数据目录,至少我无法做到这一点。
Estevex 2014年

6
您不能在非root用户的设备上打开数据目录,但是可以在仿真器上进行操作。
塔德2015年

3
如何在非根设备上打开数据?
Sujith Manjavana

4
模拟器运行时,您可以使用adb从模拟的Android下载文件。示例:adb pull /data/data/com.yourpackagename.here/databases/yourdbfile.db
贝克

我认为@SujithManjavana谈论的只是在来宾os的仿真器路径中从数据库浏览器打开sqlite数据库。复制回主机os之后没有。
Pradeep Sanjaya

14

您遇到的问题很常见,并且在文档中没有很好地解释。普通设备不包含sqlite3数据库二进制文件,这就是为什么您会收到错误消息。Android Emeulator,OSX,Linux(如果已安装)和Windows(已安装)具有二进制文件,因此您可以在计算机上本地打开数据库。

解决方法是将数据库从设备复制到本地计算机。这可以使用ADB来完成,但需要许多步骤。

在开始之前,您将需要一些信息:

  • SDK的路径(如果未包含在您的OS环境中)
  • <package name>,例如,com.example.application
  • a<local path>放置您的数据库,例如。~/Desktop要么%userprofile%\Desktop

接下来,您将需要了解以下示例中每个命令写入第一个字符的终端没有键入,但让您知道我们位于哪个shell中:

  • > =您的OS命令提示符
  • $ = ADB Shell命令提示符
  • ! = ADB Shell作为管理员命令提示符
  • %

接下来,从Terminal或Command输入以下命令(不要在中输入第一个字符或文本()

> 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路径上


9
  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)。


8

键入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添加到我的路径文件中吗?
周三

首先:您必须进入adb shell(mac或linux:在终端中执行; windows:在cmd上运行);然后执行adb shell中常见的sqlite3。
2013年

1
如何从ADB Shell执行sqlite3命令?它说:/system/bin/sh: sqlite3: not found...而且我已经添加了SQLite3和ADB作为路径变量...
Terence Chow

?你用什么设备,希望这会给欧暗示 stackoverflow.com/questions/3645319/...
log1000

5

您可以使用一个非常好的工具Stetho,将其添加到build.gradle文件中即可:

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

并在您的ApplicationorActivity onCreate()方法中将其初始化:

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

然后,您可以在地址中的chrome中查看数据库记录:

chrome://inspect/#devices

有关更多详细信息,请阅读我的文章:如何轻松查看数据库记录


4

根据设备的不同,您可能在adb shell中找不到sqlite3命令。在这种情况下,您可能需要遵循以下步骤:

亚行外壳

$ run-as package.name
$ cd ./databases/
$ ls -l#查找当前权限-r = 4,w = 2,x = 1
$ chmod 666 ./dbname.db
$ 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://stackoverflow.com/a/17177091/3758972

执行上述步骤后,可能会出现“找不到远程对象”的情况。然后在adb shell中将数据库文件夹的权限更改为755。

$ chmod 755数据库/

但请注意,它仅适用于<21的android版本。


尝试过此操作(从“ adb shell”开始,然后执行“ chmod”,然后执行数据库的“ adb pull”),但得到“ adb:错误:无法统计远程对象'/ path / to / db':权限被拒绝”错误。而且“ chmod 666”似乎可以正常工作(无论如何都没有错误)。过去,我已经可以使用Android Device Monitor提取db文件,但是如果现在尝试,我什至无法扩展初始的“ data”目录。我尝试在运行模拟器窗口且未运行相同结果的情况下尝试运行Android Device Monitor。天哪,这是愚蠢的。
Clamum

作为一种新技巧,您可以将Stetho库用于所有数据和网络监视目的。github.com/facebook/stetho
Nitesh Verma,

嗯,是的,我想我必须要使用Stetho。我之前看过它的推荐,但没有意识到我可以用它运行SQL查询,因此它对我有用。我不再使用Chrome浏览器,但是如果安装了该浏览器,则可以检查和查询Android数据库,那么我就来做。并不是说Android Device Monitor的方法超级快,您必须先拉数据库然后再在另一个应用程序中打开它。谢谢尼特什。
Clamum
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.