138

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

我已经在 ddms 模式下进行了检查。文件资源管理器中的数据为空。

4

19 回答 19

192

以下是分步说明(主要取自其他答案的组合)。这甚至适用于未植根的设备。

  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 管理器:https ://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/

  2. 打开 Firefox SQLite 管理器(工具->SQLite 管理器)并打开上面第 3 步中的数据库文件。

  3. 享受!

于 2014-01-16T01:09:36.067 回答
85

2020 年更新

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

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

  1. Facebook 的开源 [Stetho 库] ( 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 中查看您的数据库chrome://inspect

  1. 另一个选择是这个插件(不是免费的)
  2. 最后一个是这个免费/开源库,可以在浏览器中查看数据库内容https://github.com/amitshekhariitbhu/Android-Debug-Database
于 2015-08-24T03:12:09.190 回答
64

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

它的使用和设置非常简单,只需添加依赖项并通过 web 连接到设备数据库的界面。无需root手机或添加活动或其他任何东西。以下是步骤:

步骤1

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

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

第2步

打开浏览器,在 8080 端口访问手机的 IP 地址。URL 应该是这样的:http://YOUR_PHONE_IP_ADDRESS:8080。您将看到以下内容:

注意:您也可以随时通过调用方法从代码中获取调试地址 URLDebugDB.getAddressLog();

在此处输入图像描述

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

第 3 步

而已!


官方文档中的更多详细信息: https ://github.com/amitshekhariitbhu/Android-Debug-Database

于 2017-03-17T19:22:13.253 回答
54

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

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

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

您可以查看 5 分钟的演示,Android SQLite 数据库的数据库管理器

于 2014-07-21T01:24:14.960 回答
23

你可以这样做:

  1. adb shell
  2. cd /go/to/databases
  3. sqlite3 database.db
  4. sqlite>提示中,键入.tables。这将为您提供 database.db 文件中的所有表。
  5. select * from table1;
于 2015-03-03T20:19:54.570 回答
16

如果您使用的是真实设备,并且没有root,则无法在 中看到您的数据库FileExplorer,因为出于某种安全原因,该文件夹已锁定在Android系统中。FileExplorer如果您在模拟器中使用它,您会在/data/data/your package name/databases/yourdatabse.db中找到它。

于 2013-10-05T07:08:47.637 回答
7

试试AndroidDBviewer

  • 无需为您的设备植根
  • 无需导入应用程序的数据库文件
  • 很少的配置,你很高兴!

AndroidDBviewer

于 2016-03-03T07:55:08.710 回答
4

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

https://github.com/Pixplicity/dbdump

它执行此处描述的两种不同的方法:

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

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

于 2015-04-08T19:42:42.497 回答
4

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

于 2013-10-05T06:11:28.963 回答
3

按着这些次序

1 > 从这里下载 *.jar 文件。

2 > 将 *.jar 文件放入文件夹 eclipse/dropins/ 并重新启动 eclipse。

3 >在eclipse的右上角,点击DDMS图标。

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

5在主面板的文件资源管理器选项卡中,转到 /data/data/[YOUR.APP.NAMESPACE]/databases。

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

*注意:如果数据库不亮,可能是因为您的数据库没有*.db 文件扩展名。确保您的数据库名为 [DATABASE_NAME].db

*注意:如果您想使用没有 .db-Extension 的数据库:

- 下载这个 Questoid SqLiteBrowser:从这里下载

-解压缩并将其放入 eclipse/dropins(不是插件)中。

-检查此以获取更多信息,请 单击此处

于 2014-11-06T12:57:36.850 回答
3

试试 Facebook Stetho。

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

https://github.com/facebook/stetho

于 2016-07-27T14:52:40.440 回答
3

步骤 1 将此类复制到您的包中

第 2 步 将以下代码放入扩展 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);
于 2017-05-26T07:21:05.133 回答
2

希望这可以帮助你

使用终端首先指向您的位置,其中 andriod sdk 是 loacted

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
于 2016-10-20T15:11:47.697 回答
2

这适用于 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查看数据库。

于 2016-02-18T07:07:44.357 回答
2

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

于 2016-04-05T05:35:47.040 回答
1

使用文件资源管理器,您可以像这样找到您的数据库文件:

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

然后,您可以使用任何 SQLite 前端来探索您的数据库。我使用 SQLite Manager Firefox 插件。它很好,小巧,快速。

于 2013-10-05T06:40:15.703 回答
1

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

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

于 2015-12-16T11:49:50.763 回答
0

我发现非常简单的库 stetho 可以在 chrome 中浏览应用程序的 sqlite db, 请参阅

于 2016-11-18T11:28:55.553 回答
0

第一篇文章(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;
于 2017-01-10T13:38:13.277 回答