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

时间:2013-10-05 06:03:10

标签: android database sqlite adb

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

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

19 个答案:

答案 0 :(得分:182)

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

  1. 连接您的设备并以调试模式启动应用程序。

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

  3. 注意: 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"

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

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

        adb pull /sdcard/filename.sqlite

      2. 这会将数据库从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. 享受!

答案 1 :(得分:75)

here获取,您可以尝试:

  1. Facebook的开源Stetho library
  2. 在build.gradle中:

    random_row

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

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

    您可以通过Stetho.initializeWithDefaults(this);

    在Chrome中查看数据库
    1. 另一种选择是this plugin(不是免费的)
    2. 最后一个是这个免费/开源库,可以在浏览器中查看数据库内容https://github.com/amitshekhariitbhu/Android-Debug-Database

答案 2 :(得分:54)

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

使用和设置非常简单,只需添加依赖关系并通过Web连接到设备数据库的界面。无需根电话或添加活动或任何其他活动。以下是步骤:

第1步

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

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

第2步

打开浏览器并在端口8080上访问手机的IP地址。网址应如下:http://YOUR_PHONE_IP_ADDRESS:8080。您将看到以下内容:

注意:您也可以通过调用方法DebugDB.getAddressLog();

始终从代码中获取调试地址网址

enter image description here

要获取我手机的IP,我目前使用Ping工具,但有很多替代方案。

第3步

那就是它!

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

答案 3 :(得分:53)

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

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

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

您可以查看5分钟的演示, Database Manager for Android SQLite Database

答案 4 :(得分:17)

你可以这样做:

  1. adb shell
  2. cd /go/to/databases
  3. sqlite3 database.db
  4. sqlite>提示符下,键入.tables。这将为您提供database.db文件中的所有表。
  5. select * from table1;

答案 5 :(得分:14)

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

答案 6 :(得分:7)

尝试 AndroidDBvieweR

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

AndroidDBvieweR

答案 7 :(得分:4)

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

  

https://github.com/Pixplicity/dbdump

它执行两种不同的方法:

  1. 首先,它尝试让其他用户可以访问该文件,并尝试从设备中提取该文件。
  2. 如果失败,它会通过终端将文件内容流式传输到本地计算机。它执行了一个额外的技巧来删除某些设备输出到shell的\r个字符。
  3. 从这里,您可以使用各种CLI或GUI SQLite应用程序(例如sqlite3sqlitebrowser)来浏览数据库的内容。

答案 8 :(得分:4)

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

答案 9 :(得分:3)

第1步 Copy this class in your package

第2步   将以下代码放在扩展SQLiteOpenHelper的类中。

[http://jsbin.com/pemimilimi/edit?html,css,js,output][1]

第3步   在清单中注册

 //-----------------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;
    }
}

第4步

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

答案 10 :(得分:3)

请按照以下步骤操作

1 &gt;从here下载* .jar文件。

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

3 &gt;在eclipse的右上角,点击DDMS图标。

4 &gt;在左侧面板中选择正确的模拟器。

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

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

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

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

- 下载此Questoid SqLiteBrowser:Download fro here

-Unzip并将其放入eclipse / dropins(不是插件)。

- 查看此信息以获取更多信息 Click here

答案 11 :(得分:3)

尝试facebook Stetho。

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

https://github.com/facebook/stetho

答案 12 :(得分: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查看数据库。

答案 13 :(得分:2)

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

答案 14 :(得分:2)

希望这有助于你

使用终端首先指出您所在的位置和/或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

答案 15 :(得分:1)

有TKlerx的 Android SQLite browser for Eclipse ,它与Android Studio一起完全正常运行。我会推荐它,因为它非常实用。

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

答案 16 :(得分:0)

第一篇文章(https://stackoverflow.com/a/21151598/4244605)对我不起作用。

我为从设备获取DB文件编写了自己的脚本。没有根。工作正常。

  1. 使用adb将脚本复制到目录(例如:~/android-sdk/platform-tools)。
  2. 设备必须连接到PC。
  3. 使用./getDB.sh -p <packageName>获取数据库名称。
  4. 用法:./getDB.sh -p <packageName> -n <name of DB> -s <store in mobile device>用于获取DB文件(执行脚本)目录。

    我建议您将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;
    

答案 17 :(得分:0)

我发现非常简单的库stetho来浏览chrome中的sqlite数据库,see

答案 18 :(得分:0)

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

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

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