web-dev-qa-db-ja.com

Android StudioのSqliteデータベースに挿入されたデータを表示する方法

この問題で私を助けてくれませんか。

Sqliteデータベースに値を挿入しています。

挿入したデータを確認または表示するにはどうすればよいですか。

データを表示するためのツールやその他の手法はありますか?

8
Bivin Vinod

Androidアプリケーションに最適なSqliteデバッグツールは

StethoFacebookによる

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依存関係のみが厳密に必要ですが、ネットワークヘルパーの1つを使用することもできます。

    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を使用して統合を支援できますが、このアプローチにはいくつかの注意点があることに注意してください。特に、Stethoが圧縮ペイロードサイズを報告するためには、Accept-Encoding: gzipをリクエストヘッダーに明示的に追加し、圧縮応答を手動で処理する必要があります。

enter image description here

Sqlite Databasesenter image description here

詳細については stetho をご覧ください。

0
Bivin Vinod

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. [データベース]-> [データベースに接続]->データベースファイルを参照し、[OK]をクリックします。 SQLiteファイルが開きます。

DDMSにデータベースをダウンロードする場合、ダウンロードします

DB.Browser.for.SQLite-3.10.1-win64

このソフトウェアにdatabaseファイルを置くと、データを取得できます。


DDMSの新しい更新

  • 私は今すぐ回答を更新しますAndroid Studio update in Android Studio 3.1 or up to like now 3.2 in this Studio[〜#〜] ddms [〜#〜]関数は使用できませんが、心配しないでください。別の解決策があります。

  • あなたのAndroid Studioの右側の下隅を参照してください)のような1つのオプションがありますデバイスファイルエクスプローラーこのボタンをクリックします

その後、次のような画像が画面に表示されます。

enter image description here

次に、data -> data -> your project name. :)を選択します

9
Ali

誰もこれについて言及していないとは信じられませんが、おそらくあなたが探しているのは Android Debug Database です。

Android Roomでも使用できます。テーブルやレコードを表示、編集できます。

6
Bmbariah

承認しましたが、Cassius Clay's回答、生データを処理する必要がある場合

ルートは必要ありません(SDカードにない場合は、@ 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
Jim West

DDMSアプローチは非ルート化デバイスでは機能しません

私は ルート化されていないデータベースを確認する方法Androidデバイス を使用して、デバイスからPCにSqlite DBをインポートします。

次の手順に従ってください。

  1. Android Studioでターミナルを開きます
  2. デフォルトのディレクトリをyour_path_to> SDK> platform-tools>に変更します
  3. adb Shell run-as [パッケージ] chmod 777/data/data/[パッケージ]/databases /

    adb Shell run-as [パッケージ] chmod 777/data/data/[パッケージ]/databases/[db_file_name]

    adb Shell run-as [パッケージ] cp/data/data/[パッケージ]/databases/[db_file_name]/sdcard /

    adb pull/sdcard/[db_file_name]

4.プルされたSQLite DBをフォルダーsdk> platform-toolsで確認します。

これで、任意のSQLiteビューアーを使用して、プルされたデータベースを表示できます。

注:マニフェストファイルには2つの権限が必要です。それ以外の場合、データはプルされたDBにコピーされません

Android.permission.WRITE_EXTERNAL_STORAGE Android.permission.READ_EXTERNAL_STORAGE

2
Ankit

このライブラリ(データベースデバッグデータベース)を使用して、共有設定データを含むすべてのDBテーブルデータを追加、編集、チェックできます このリンクをクリックしてインストールします

必要なのは、依存関係を置き、プログラムをコンパイルして実行することだけです。ブラウザに(your_package_name D/DebugDB:Open http://172.16.6.117:8081 のようなリンクがあります。 )ブラウザですべてのDBを表示するlogcatで enter image description here

0
Aditya Rohilla