如何在 Android 设备上查看 SQLite 数据库?

我在 SQLite 数据库中有一组数据。我需要在设备上查看数据库。我该怎么做?

我已经在 ddms 模式下签入。文件资源管理器中的数据为空。

294936 次浏览

我一直在使用 SQLite 数据库浏览器查看 Android 开发中的内容 SQLiteDB。您必须首先从设备中提取数据库文件,然后在 SQLiteDB 浏览器中打开它。

使用文件资源管理器,您可以像下面这样定位数据库文件:

data-->data-->your.package.name-->databases--->yourdbfile.db

然后您可以使用任何前端的 SQLite 来查看数据库。我使用 SQLite Manager Firefox 插件。很漂亮,很小,而且很快。

如果您使用的是真正的设备,而且它没有根,那么就不可能在 FileExplorer中看到您的数据库,因为由于某些安全原因,该文件夹被锁定在 Android 系统中。如果你在模拟器中使用它,你会在 FileExplorer数据/数据/包名/数据库/数据库中找到它。

下面是一步一步的说明(大部分来自其他答案的组合)。这甚至适用于没有根的设备。

  1. 连接设备并在调试模式下启动应用程序。

  2. 您可能希望使用 adb -d shell "run-as com.yourpackge.name ls /data/data/com.yourpackge.name/databases/"查看数据库文件名。

注意: com.yourpackge.name是您的应用程序包名称。

  1. 将数据库文件从应用程序文件夹复制到 SD 卡。

    adb -d shell "run-as com.yourpackge.name cat /data/data/com.yourpackge.name/databases/filename.sqlite > /sdcard/filename.sqlite"

注意: filename.sqlite 是您在创建数据库时使用的数据库名称

  1. 将数据库文件拉到您的计算机上:

    adb pull /sdcard/filename.sqlite

这将把数据库从 SD 卡复制到 ADB 所在的位置。

  1. 安装 Firefox SQLite Manager: https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/

  2. 打开 Firefox SQLite Manager (Tools-> SQLite Manager)并从上面的步骤3打开数据库文件。

  3. 好好享受吧!

查看和管理 Android 应用程序数据库的最佳方法是使用库 DatabaseManager _ For _ Android

它是一个单独的 Java 活动文件; 只需将其添加到源文件夹中。 您可以查看您的应用程序数据库中的表,更新,删除,插入行到您的表。你应用里的一切。

开发完成后,从 src 文件夹中删除 Java 文件。

你可以查看5分钟的演示,安卓 SQLite 数据库的数据库管理器

按照以下步骤操作

给你下载 * . jar 文件。

2 > 将 * . jar 文件放入 eclipse/dropin/和 Restart eclipse 文件夹中。

在 Eclipse 的右上角,单击 DDMS 图标。

在左侧面板中选择合适的模拟器。

5 在主面板的 File Explorer 选项卡中,转到/data/data/[ YOUR.APP.NAMESPACE ]/database。

在 DDMS 图标下面,当你选择你的数据库时,应该会有一个新的蓝色数据库图标亮起。单击它,您将看到一个 Questoid Sqlite Manager 选项卡打开,以查看您的数据。

注意: 如果数据库没有启动,可能是因为数据库没有 * 。数据库文件扩展名。确保数据库名为[ DATABASE _ NAME ]。分贝

* 注意: 如果你想使用一个没有. DB 的数据库-扩展名:

- 下载 Questoid SqLiteBrowser: 从这里下载

- 解压并将其放入 eclipse/dropin (不是 Plugins)中。

看看这个,了解更多信息 按此处

你可以这样做:

  1. adb shell
  2. cd /go/to/databases
  3. sqlite3 database.db
  4. sqlite>提示符中,键入 .tables
  5. select * from table1;

虽然这不能直接查看设备上的数据库,但是我已经发布了一个简单的 shell 脚本,用于将数据库转储到本地计算机:

Https://github.com/pixplicity/dbdump

它执行这里描述的两种不同的方法:

  1. 首先,它尝试让其他用户可以访问该文件,并尝试将其从设备中拉出。
  2. 如果失败,它将文件的内容通过终端传输到本地计算机。它执行一个额外的技巧来删除某些设备输出到 shell 的 \r字符。

从这里开始,您可以使用各种 CLI 或 GUISQLite 应用程序(如 sqlite3sqlitebrowser)来浏览数据库的内容。

更新日期2020

数据库检查器(适用于 Android Studio 4.1版本)。请阅读 中篇文章

对于旧版本的 Android Studio,我推荐以下3个选项 :

  1. Facebook 的开源[ Stetho library ](http://facebook.github.io/stetho/)。摘自 给你

在 build.gradle:

dependencies {
// Stetho core
compile 'com.facebook.stetho:stetho:1.5.1'
//If you want to add a network helper
compile 'com.facebook.stetho:stetho-okhttp:1.5.1'
}

在应用程序对象中初始化库:

Stetho.initializeWithDefaults(this);

你可以在浏览器中从 chrome://inspect查看你的数据库

  1. 另一个选择是 这个插件(不是免费的)
  2. 最后一个是这个免费/开放源码库,用于查看浏览器 https://github.com/amitshekhariitbhu/Android-Debug-Database中的 db 内容

还有 TKlerx 的 安卓 SQLite 浏览器 for Eclipse 安卓 SQLite 浏览器 for Eclipse ,它和 Android Studio 一起功能齐全。我推荐它,因为它非常实用。

要在设备监视器上安装它,只需将 JAR 文件放在 [Path to Android SDK folder]/sdk/tools/lib/monitor-[...]/plugins中。

这适用于 Android 6.0(至少是可调试的应用程序) :

adb shell "run-as your.package.name cp /data/data/your.package.name/databases/you-db-name  /sdcard/file_to_write"

然后您可以简单地使用 ASQLiteManager查看数据库,例如。

试试 安卓 DBviewR

  • 您的设备不需要根
  • 无需导入应用程序的数据库文件
  • 几个配置,你是好去!

AndroidDBvieweR

您可以尝试 SQLiteOnWeb。它在浏览器中管理您的 SQLite 数据库。

试试 facebook 上的 Stetho。

Stetho 是 Android 应用程序的调试桥梁,支持强大的 Chrome 开发工具等等。

Https://github.com/facebook/stetho

希望这个能帮到你

使用终端第一点您的位置 andriod sdk 是位于

eg: C:\Users\AppData\Local\Android\sdk\platform-tools>

然后检查所附设备清单

 adb devices

然后运行此命令将文件从设备复制到系统

adb -s YOUR_DEVICE_ID shell run-as YOUR_PACKAGE_NAME chmod -R 777 /data/data/YOUR_PACKAGE_NAME/databases && adb -s YOUR_DEVICE_ID shell "mkdir -p /sdcard/tempDB" && adb -s YOUR_DEVICE_ID shell "cp -r /data/data/YOUR_PACKAGE_NAME/databases/ /sdcard/tempDB/." && adb -s YOUR_DEVICE_ID pull sdcard/tempDB/ && adb -s YOUR_DEVICE_ID shell "rm -r /sdcard/tempDB/*"

您可以在此路径中找到数据库文件

 Android\sdk\platform-tools\tempDB\databases

我发现非常简单的库 stetho 浏览应用程序的 sqlite 数据库在 chrome,

第一个职位(https://stackoverflow.com/a/21151598/4244605)不为我工作。

我写了自己的脚本获取数据库文件从设备。没有根。工作正常。

  1. 用 adb 将脚本复制到目录(例如: ~/android-sdk/platform-tools)。
  2. 设备必须连接到 PC。
  3. 使用 ./getDB.sh -p <packageName>获取数据库名称。

用法: ./getDB.sh -p <packageName> -n <name of DB> -s <store in mobile device>用于将数据库文件转移到此目录(执行脚本的位置)。

我建议您将 DB 的文件名设置为 * . SQLite 并使用 Firefox 插件 SQLite Manager 打开它。

(很久以前,我用 Bash 写过一些东西,你可以编辑这段代码。)

#!/bin/sh
# Get DB from Android device.
#


Hoption=false
Poption=false
Noption=false
Soption=false
Parg=""
Narg=""
Sarg=""


#-----------------------FUNCTION--------------------------:
helpFunc(){ #help
echo "Get names of DB's files in your Android app.
Usage: ./getDB -h
./getDB -p packageName -n nameOfDB -s storagePath
Options:
-h                                           Show help.
-p packageName                               List of databases for package name.
-p packageName -n nameOfDB -s storagePath    Save DB from device to this directory."
}




#--------------------------MAIN--------------------------:
while getopts 'p:n:s:h' options; do
case $options in


p) Poption=true
Parg=$OPTARG;;


n) Noption=true
Narg=$OPTARG;;


s) Soption=true
Sarg=$OPTARG;;


h) Hoption=true;;
esac
done


#echo "-------------------------------------------------------
#Hoption: $Hoption
#Poption: $Poption
#Noption: $Noption
#Soption: $Soption
#Parg: $Parg
#Narg: $Narg
#Sarg: $Sarg
#-------------------------------------------------------"\\n
#echo $#    #count of params


if [ $Hoption = true ];then
helpFunc
elif [ $# -eq 2 -a $Poption = true ];then #list
./adb -d shell run-as $Parg ls /data/data/$Parg/databases/
exit 0
elif [ $# -eq 6 -a $Poption = true -a $Noption = true -a $Soption = true ];then #get DB file
#Change permissions
./adb shell run-as $Parg chmod 777 /data/data/$Parg/databases/
./adb shell run-as $Parg chmod 777 /data/data/$Parg/databases/$Narg
#Copy
./adb shell cp /data/data/$Parg/databases/$Narg $Sarg
#Pull file to this machine
./adb pull $Sarg/$Narg
exit 0
else
echo "Wrong params or arguments. Use -h for help."
exit 1;
fi


exit 0;

到目前为止,我发现最好的方法是使用 Android-Debug-Database 工具。

它的使用和设置非常简单,只需添加依赖和连接到设备数据库的界面通过网络。不需要根手机或添加活动或任何东西。以下是步骤:

步骤1

将以下依赖项添加到应用程序的 Gradle 文件中并运行应用程序。

debugCompile 'com.amitshekhar.android:debug-db:1.0.0'

步骤2

打开浏览器,访问端口8080上的手机 IP 地址。URL 应该是这样的: http://YOUR_PHONE_IP_ADDRESS:8080。你会收到以下礼物:

注意: 还可以通过调用方法 DebugDB.getAddressLog();从代码中获取调试地址 URL

enter image description here

为了获得我手机的 IP 地址,我目前使用 Ping 工具,但有很多选择。

步骤3

就是这样!


正式文件中的更多细节: Https://github.com/amitshekhariitbhu/android-debug-database

步骤1 将此类复制到包中

第二步 将下面的代码放入扩展 SQLiteOpenHelper 的类中。

 //-----------------for show databasae table----------------------------------------


public ArrayList<Cursor> getData(String Query)
{
//get writable database
SQLiteDatabase sqlDB =this.getWritableDatabase();
String[] columns = new String[] { "mesage" };
//an array list of cursor to save two cursors one has results from the query
//other cursor stores error message if any errors are triggered
ArrayList<Cursor> alc = new ArrayList<Cursor>(2);
MatrixCursor Cursor2= new MatrixCursor(columns);
alc.add(null);
alc.add (null);




try{
String maxQuery = Query ;
//execute the query results will be save in Cursor c
Cursor c = sqlDB.rawQuery(maxQuery, null);


//add value to cursor2
Cursor2.addRow(new Object[] { "Success" });


alc.set(1,Cursor2);
if (null != c && c.getCount() > 0)
{
alc.set(0,c);
c.moveToFirst();
return alc ;
}
return alc;
}
catch(SQLException sqlEx)
{
Log.d("printing exception", sqlEx.getMessage());
//if any exceptions are triggered save the error message to cursor an return the arraylist
Cursor2.addRow(new Object[] { ""+sqlEx.getMessage() });
alc.set(1,Cursor2);
return alc;
}
catch(Exception ex)
{
Log.d("printing exception",ex.getMessage());
//if any exceptions are triggered save the error message to cursor an return the arraylist
Cursor2.addRow(new Object[] { ""+ex.getMessage() });
alc.set(1,Cursor2);
return alc;
}
}

步骤3 舱单登记簿

<activity
android:name=".database.AndroidDatabaseManager"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"/>

步骤4

Intent i = new Intent(this, AndroidDatabaseManager.class);
startActivity(i);