簡體   English   中英

如何在Android Studio上獲取Sqlite數據庫中插入數據的實時視圖

[英]How to get the live view of inserted data in Sqlite database on Android Studio

你能幫我解決這個問題嗎?

我正在向我的 Sqlite 數據庫中插入值。

如何檢查或查看插入的數據。

是否有任何工具或其他技術來顯示數據?

如果您想在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 管理器旁邊的設備監視器圖標。
  2. 設備監視器窗口將打開。 在文件資源管理器選項卡中,單擊data -> data -> your project name. 之后您的數據庫文件將打開。 單擊pull a file from device icon. 使用 .db 擴展名保存文件。
  3. 打開 FireFox,按 Alt, Tools -> SQLiteManager.
  4. 按照數據庫-> 連接到數據庫-> 瀏覽您的數據庫文件,然后單擊確定。 您的 SQLite 文件現在將打開。

如果你在DDMS上下載一個數據庫,那么你下載

DB.Browser.for.SQLite-3.10.1-win64

然后把database文件放在這個軟件上,你就得到了數據。


DDMS 的新更新

  • 我會更新我的答案,因為現在 Android Studio 3.1 中的 Android Studio 更新或更新到其他像現在 3.2 中的此 Studio DDMS功能不可用但別擔心我有另一個解決方案。

  • 在你的 android Studio 中看到右下角有一個選項像設備文件資源管理器點擊這個按鈕

之后你可以看到如下圖在你的屏幕上打開:

在此處輸入圖像描述

現在選擇data -> data -> your project name. :)

我不敢相信沒有人提到這個,但你可能正在尋找的是Android 調試數據庫

也適用於 Android Room,您可以查看、編輯表格和記錄。

盡管您批准了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)

預覽 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因為我懶得記錄

預習..

DDMS 方法不適用於非 root 設備

我按照如何在未 root 的 android 設備上檢查數據庫將 Sqlite 數據庫從設備導入 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.在文件夾sdk>platform-tools中檢查拉取的SQLite DB

現在您可以使用任何 SQLite 查看器來查看拉取的數據庫。

注意:清單文件中需要兩個權限,否則數據不會復制到拉取的數據庫中

android.permission.WRITE_EXTERNAL_STORAGE android.permission.READ_EXTERNAL_STORAGE

您可以使用此庫(數據庫調試數據庫)添加、編輯、檢查所有數據庫表數據,包括您的共享首選項數據。點擊此鏈接進行安裝

您需要做的就是放置依賴項,編譯並運行程序,您會在 logcat 中找到一個類似(your_package_name D/DebugDB: Open http://172.16.6.117:8081 in your browser)的鏈接,它將顯示所有您在瀏覽器上的數據庫在此處輸入圖像描述

Android 應用程序最好的 Sqlite 調試工具是

臉書上的 Stetho

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM