如何在 Android Studio 上获取 Sqlite 数据库中插入数据的实时视图

Posted

技术标签:

【中文标题】如何在 Android Studio 上获取 Sqlite 数据库中插入数据的实时视图【英文标题】:How to get the live view of inserted data in Sqlite database on Android Studio 【发布时间】:2018-08-19 10:01:48 【问题描述】:

请你帮我解决这个问题。

我正在向我的 Sqlite 数据库插入值。

如何检查或查看插入的数据。

是否有任何工具或其他技术可以显示数据?

【问题讨论】:

搜索关于内容提供者 您想在.db 文件中查看该数据还是想在应用中显示? 您要记录的写作联系人 :) @BivinVinod 请参考这个,***.com/questions/19194576/… 使用安卓设备监视器从数据文件夹中获取数据库。然后使用 sqlite 浏览器打开 .db 文件。从此链接下载:sqlitebrowser.org 【参考方案1】:

如果您想在 Log 上显示数据,请尝试以下代码:

for (Contact cn : contacts) 
            String log = "Id: "+cn.getID()+" ,Name: " + cn.getName() + " ,Phone: " + cn.getPhoneNumber();
                // Writing Contacts to log
        Log.d("Name: ", log);

显示database 的其他方式请参见以下步骤:

    转到Tools -> DDMS 或单击工具栏中 SDK 管理器旁边的设备监视器图标。 设备监视器窗口将打开。在文件资源管理器选项卡中,单击data -> data -> your project name. 之后,您的数据库文件将打开。点击pull a file from device icon.使用.db扩展名保存文件。 打开 FireFox,按 Alt,Tools -> SQLiteManager. 关注数据库 -> 连接到数据库 -> 浏览您的数据库文件并单击确定。您的 SQLite 文件现在将打开。

如果您在 DDMS 上下载数据库,那么您下载

DB.Browser.for.SQLite-3.10.1-win64

database文件放到这个软件上就可以得到数据了。


DDMS 的新更新

我将更新我的答案,因为现在 android Studio 3.1 中的 Android Studio 更新或此 Studio 中的其他类似现在 3.2 DDMS 功能不可用,但别担心,我还有另一个解决方案。

在您的 android Studio 中查看右侧底角有一个选项,如 设备文件资源管理器单击此按钮

之后,您可以看到如下图在您的屏幕上打开:

现在选择data -> data -> your project name. :)

【讨论】:

【参考方案2】:

DDMS 方法不适用于非 root 设备

我跟随How to check database on not rooted android device将Sqlite DB从设备导入PC。

按照给定的步骤:

    在 Android Studio 中打开终端 将默认目录更改为 your_path_to>SDK>platform-tools>

    adb shell run-as [package] chmod 777 /data/data/[package]/databases/

    adb shell run-as [package] chmod 777 /data/data/[package]/databases/[db_file_name]

    adb shell run-as [package] cp /data/data/[package]/databases/[db_file_name] /sdcard/

    adb pull /sdcard/[db_file_name]

4.检查文件夹sdk>platform-tools中拉取的SQLite DB

现在您可以使用任何 SQLite 查看器来查看拉取的数据库。

注意:Manifest 文件需要两个权限,否则数据不会复制到拉取的数据库中

android.permission.WRITE_EXTERNAL_STORAGE android.permission.READ_EXTERNAL_STORAGE

【讨论】:

【参考方案3】:

我不敢相信没有人提到这一点,但您可能正在寻找的是Android Debug Database

也适用于 Android Room,您可以查看、编辑表格和记录。

【讨论】:

【参考方案4】:

虽然你批准了Cassius Clay's的回答,但如果你需要处理原始数据

不需要root(如果它不在sdcard上,请按照@Ankit的回答)

import os
import sys
import subprocess
import sqlite3
import pandas as pd

arg_folder = sys.argv[1]  # root folder to recursively search db files from
output_lines = subprocess.check_output(['adb', 'shell', ('ls -R %s' % arg_folder)]).decode('utf-8').splitlines()
db_files = []
current_folder = ''
for line in output_lines:
    """
        Output example for 'ls -R /data/data':
            /data/data/org.fdroid.fdroid/files/fdroid/repo/icons:

            /data/data/org.fdroid.fdroid/shared_prefs:
            apks-pending-install.xml
            org.fdroid.fdroid_preferences.xml

            /data/data/ru.meefik.busybox:
            cache
            files
            lib
            shared_prefs

        if line contains '/' it's a directory, we want to extract the full path for '.db' files
    """
    if line.__contains__('/'):
        current_folder = line
    elif line.endswith('.db'):
        db_files.append('%s/%s' % (current_folder[:-1], line))
print("Listing databases..")

while True:
    try:
        for idx, full_path in enumerate(db_files):
            print(") ".format(idx + 1, full_path))
        i = input("Enter database number : ")
        db = db_files[int(i) - 1]  # selected database
        subprocess.check_output(['adb', 'pull', db])  # pulling the .db file from device to local
        db = db.split('/')[-1]  # "/data/data/com.app/folder/private.db".split('/')[-1] = private
        conn = sqlite3.connect(db)
        # getting list of current database tables
        tables = conn.execute("SELECT name FROM sqlite_master WHERE type='table';").fetchall()
        for table in tables:
            table = table[0]  # little fix, it comes as a tuple
            print('%s%s' % (db[:-2], table))
            with pd.option_context('display.width', 1000):  # setting terminal width to view all table columns inline
                print(pd.read_sql_query("SELECT * FROM %s" % table, conn))  # print table content
            print('- ' * 50)  # table print separator
        # cleanup
        if input('remove database file (from local) [y/N] ? ').lower() == 'y':
            print('removing ', db)
            os.remove(db)
        # repeat
        c = input("Press ENTER to continue or CTRL+C to Quit..")
    except KeyboardInterrupt:
        exit(0)

这是一个不太人性化的超长单行

read -p "enter root folder to recursively search db files from: " f;dbs=( $(adb shell ls -R $f |
    while read line
    do
        line=$(echo $line | tr -d '\r')
        if [[ "$line" =~ ^/.*:$ ]]
        then
            dir=$line%:
        elif [[ "$line" = "opendir failed" ]]
        then
            echo "$dir - permission denied"
        else
            if [[ "$dir" = "/" ]]; then dir=""; fi
            echo "$dir/$line" | grep '\.db$'
        fi
    done)
);echo $dbs[@]; dbs+=(exit);select db in "$dbs[@]"; do
  [[ $db == exit ]] && break
  echo "You have chosen $db"
  adb pull $db
  python -c 'import sqlite3;import pandas as pd;db=sqlite3.connect("'$db##*/'");tables=db.cursor().execute("SELECT name FROM sqlite_master WHERE type=\"table\";").fetchall();print([pd.read_sql_query("SELECT * FROM %s" % t[0], db) for t in tables]);'
done

GIF 因为我懒得记录

【讨论】:

【参考方案5】:

您可以使用此库(数据库调试数据库)添加、编辑、检查所有数据库表数据,包括您的 sharedpreferences 数据 Follow this link to install.

您需要做的就是放置依赖项,编译并运行程序,您会在 logcat 中找到一个类似 (your_package_name D/DebugDB: Open http://172.16.6.117:8081 in your browser) 的链接,它将显示您所有的数据库浏览器

【讨论】:

【参考方案6】:

android应用最好的Sqlite调试工具是

Stetho 来自 Facebook

http://facebook.github.io/stetho/

Stetho 是适用于 Android 应用程序的复杂调试桥。启用后,开发人员可以访问 Chrome 桌面浏览器原生的 Chrome 开发人员工具功能。开发人员还可以选择启用可选的 dumpapp 工具,该工具为应用程序内部提供强大的命令行界面。

下载您也可以通过 Gradle 或 Maven 从 Maven Central 包含 Stetho。

 // Gradle dependency on Stetho 
  dependencies  
    compile 'com.facebook.stetho:stetho:1.5.1' 
   
  <dependency>
    <groupid>com.facebook.stetho</groupid> 
    <artifactid>stetho</artifactid> 
    <version>1.5.1</version> 
  </dependency> 

只有主要的 stetho 依赖是严格要求的,但是您也可能希望使用其中一个网络助手:

    dependencies  
        compile 'com.facebook.stetho:stetho-okhttp3:1.5.1' 
       

或者

 dependencies  
    compile 'com.facebook.stetho:stetho-okhttp:1.5.1' 
   

或者

 dependencies  
    compile 'com.facebook.stetho:stetho-urlconnection:1.5.1' 
  

集成

设置

与 Stetho 集成旨在为大多数现有 Android 应用程序提供无缝且直接的操作。在您的Application class:

中有一个简单的初始化步骤
public class MyApplication extends Application 
  public void onCreate() 
    super.onCreate();
    Stetho.initializeWithDefaults(this);
  

这会调出大部分默认配置,但不会启用一些额外的钩子(最值得注意的是,网络检查)。有关各个子系统的具体详细信息,请参见下文。

Enable Network Inspection

如果您在 2.2.x+ 或 3.x 版本中使用流行的 OkHttp 库,您可以使用拦截器系统自动挂钩到您现有的堆栈。这是目前启用网络检查的最简单、最直接的方法。

对于 OkHttp 2.x

OkHttpClient client = new OkHttpClient();
client.networkInterceptors().add(new StethoInterceptor());

对于 OkHttp 3.x

 new OkHttpClient.Builder()
        .addNetworkInterceptor(new StethoInterceptor())
        .build();

由于拦截器可以修改请求和响应,因此在所有其他拦截器之后添加 Stetho 拦截器以获得网络流量的准确视图。

如果您使用HttpURLConnection,您可以使用StethoURLConnectionManager 来协助集成,但您应该知道这种方法有一些注意事项。特别是,您必须将Accept-Encoding: gzip 显式添加到请求标头并手动处理压缩响应,以便 Stetho 报告压缩的有效负载大小。

更多信息请访问stetho

【讨论】:

以上是关于如何在 Android Studio 上获取 Sqlite 数据库中插入数据的实时视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ubuntu 上安装 Android Studio?

Sqlite表在小米Note 7s上不创建,但在其他手机和Android Studio中的虚拟设备上创建。

如何在 Android Studio 中使用 Kotlin 从 Firestore 数据库中获取下一条和上一条数据?

Android Studio,ArrayList+Search Bar,如何获取正确的Activity

android studio和eclipse中如何获取sha1值

如何更新Android Studio