如何在Android Studio上的Sqlite数据库中查看插入的数据

时间:2018-03-11 06:34:55

标签: java android sqlite android-studio android-sqlite

请你帮我解决这个问题。

我将值插入我的Sqlite数据库。

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

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

6 个答案:

答案 0 :(得分:7)

如果您想在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的方式见下面的步骤:

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

      

    DB.Browser.for.SQLite-3.10.1-Win64的

    并将database文件放在此软件上,然后获取数据。

    DDMS的最新更新

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

    • 在Android工作室中查看右侧底角有一个选项,如设备文件资源管理器点击此按钮

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

    enter image description here

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:3)

虽然您已批准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)

preview 2..

这是一个不那么人性化的非常长的单线

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,因为我懒得记录

preview..

答案 3 :(得分:2)

DDMS方法无法在非root设备中使用

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

按照给定的步骤进行操作:

  1. 在Android Studio中打开终端
  2. 将默认目录更改为your_path_to> SDK> platform-tools>
  3. 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. 4.在文件夹sdk> platform-tools

    中检查拉出的SQLite DB

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

    注意:清单文件中需要两个权限,否则数据不会被复制到数据库中

    android.permission.WRITE_EXTERNAL_STORAGE android.permission.READ_EXTERNAL_STORAGE

答案 4 :(得分:0)

您可以使用此库(数据库调试数据库)添加,编辑,检查所有数据库表数据,包括共享首选项数据 Follow this link to install

所有您需要做的就是放下依赖项,编译并运行程序,您将在logcat中找到一个类似(your_package_name D / DebugDB:在浏览器中打开http://172.16.6.117:8081的链接),该链接将显示所有浏览器上的数据库enter image description here

答案 5 :(得分:0)

针对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库,则可以使用Interceptors系统自动挂钩到现有堆栈中。这是目前启用网络检查的最简单,最直接的方法。

对于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报告压缩的有效负载大小。

enter image description here

Sqlite Databases enter image description here

有关更多信息,请访问stetho