AndroidStudioでADBを使用してSQLiteDBを表示する方法


83

SQLiteデータベースを表示する必要がありますが、その方法がわかりません。私はに行ってきたhttp://www.sqlite.org/download.html、私のOS用のコマンドラインシェルをダウンロードしたが、私はプログラムを実行し、入力したときadb ...、私はエラーを取得します。

注:私はAndroid Studioを使用しているので、Android Studioには必要なすべてのSDKツールが含まれていると言っていたので、余分なものをインストールする必要はないと思います。

回答:


160

最も簡単な方法:ADBシェルを介してSqlite3に接続する

Android Studioでそれを行う方法は見つかりませんでしたが、毎回ファイルをプルする代わりに、リモートシェルを使用してデータベースにアクセスします。

ここですべての情報を見つけてください:http//developer.android.com/tools/help/sqlite3.html

1-コマンドプロンプトでplatform-toolsフォルダーに移動します

2-コマンドadb devicesを入力してデバイスのリストを取得します

C:\Android\adt-bundle-windows-x86_64\sdk\platform-tools>adb devices
List of devices attached
emulator-xxxx   device

3-シェルをデバイスに接続します。

C:\Android\adt-bundle-windows-x86_64\sdk\platform-tools>adb -s emulator-xxxx shell

4a-ルート化されたデバイスでこのステップをバイパスできます

run-as <your-package-name> 

4b-dbファイルを含むフォルダーに移動します。

cd data/data/<your-package-name>/databases/

5-sqlite3を実行してデータベースに接続します。

sqlite3 <your-db-name>.db

6-好きなsqlite3コマンドを実行します。例:

Select * from table1 where ...;

注:以下で実行するその他のコマンドを見つけてください

SQLiteチートシート

SQLiteデータベースのテーブルを表示するには、いくつかの手順があります。

  1. データベース内のテーブルを一覧表示します。

    .tables
    
  2. テーブルがどのように見えるかをリストします。

    .schema tablename
    
  3. 表全体を印刷します。

    SELECT * FROM tablename;
    
  4. 使用可能なすべてのSQLiteプロンプトコマンドを一覧表示します。

    .help
    

1
このメソッドにはルートが必要ですか?
tomislav2012 2016年

1
@ tomislav2012はい、/data/dataディレクトリに
移動

1
sqlite3コマンドがAndroid4.1を実行しているHTCOne Sで認識されない
Alex

@Alex sqlite3を見つけて、可能であればインストールすることをお勧めします。開発は簡単です
Dheeraj Bhaskar 2016

1
ありがとう。sqliteファイルをコンピュータのデスクトップに転送したい場合は、最初にできますcp /data/data/<your-package-name>/databases/<your-db-name>.db /sdcard。次に、エクスプローラーなどのファイルマネージャーを使用して、ファイルをメールに送信します。:)
Cheok Yan Cheng

76

私にとって最も簡単な方法は、Androidデバイスモニターを使用してデータベースファイルを取得し、SQLiteデータベースブラウザーを使用してファイルを表示し、AndroidStudioを使用してAndroidをプログラムすることです。

1)AndroidStudioからAndroidエミュレーターを使用してデータベースアプリを実行して起動します。(確認のためにデータベースアプリにデータを挿入しました)

2)Androidデバイスモニターを実行します。実行方法?; に移動し[your_folder] > sdk >toolsます。そのフォルダーにmonitor.batがあります。shift + right clickフォルダ内で「Open command window here」を選択します。このアクションにより、コマンドプロンプトが起動します。タイプmonitorとAndroidデバイスモニターが起動します。

3)現在実行しているエミュレーターを選択します。次に、data>data>[your_app_name]>databases

4)アイコン(右上隅にあります)をクリックし(アイコンにカーソルを合わせると、「デバイスからファイルをプル」と表示されます)、好きな場所に保存します

5)SQLiteデータベースブラウザを起動します。保存したファイルをそのブラウザにドラッグアンドドロップします。

6)Browse Dataタブに移動し、表示するテーブルを選択します。

ここに画像の説明を入力してください ここに画像の説明を入力してください


9
デバイスモニターからデータディレクトリを開くことはできないと思いますが、少なくとも私はそれを行うことができません。
Estevex 2014年

6
ルート権限を取得されていないデバイスでデータディレクトリを開くことはできませんが、エミュレータで開くことはできます。
2015年

3
ルート権限を取得されていないデバイスでデータを開く方法は?
Sujith Manjavana 2015

4
エミュレーターの実行中に、adbを使用してエミュレートされたAndroidからファイルをダウンロードできます。例:adb pull /data/data/com.yourpackagename.here/databases/yourdbfile.db
Baker

@SujithManjavanaは、ゲストOSのエミュレータパスにあるときにデータベースブラウザからsqliteデータベースを開くことについて話していると思います。ホストOSにコピーして戻した後ではありません。
プラディープサンジャヤ

14

あなたが抱えている問題は一般的であり、ドキュメントでは十分に説明されていません。通常のデバイスにはsqlite3データベースバイナリが含まれていないため、エラーが発生します。Android Emeulator、OSX、Linux(インストールされている場合)およびWindows(インストール後)にはバイナリがあるため、マシン上でローカルにデータベースを開くことができます。

回避策は、データベースをデバイスからローカルマシンにコピーすることです。これはADBで実行できますが、いくつかの手順が必要です。

始める前に、いくつかの情報が必要になります。

  • SDKのパス(OS環境に含まれていない場合)
  • あなたの<package name>、例えば、com.example.application
  • <local path>あなたのデータベース、例えばを配置します。~/Desktopまたは%userprofile%\Desktop

次に、以下の例の最初の文字に各コマンドが書き込まれる端末が入力されないことを理解する必要がありますが、どのシェルにあるかを知ることができます。

  • > = OSコマンドプロンプト
  • $ = ADBシェルコマンドプロンプト
  • ! =管理コマンドプロンプトとしてのADBシェル
  • %

次に、ターミナルまたはコマンドから次のコマンドを入力します(最初の文字またはテキストは入力しないでください()

> adb shell
$ su
! cp /data/data/<package name>/Databases/<database name> /sdcard
! exit
$ exit
> adb pull /sdcard/<database name> <local path>
> sqlite3 <local db path>
% .dump
% .exit  (to exit sqldb)

これは、データベースをローカルマシンにコピーし、データベースをローカルで読み取る方法についての非常に重要な方法です。エミュレータからデバイスにsqlite3バイナリをインストールする方法を説明するSOおよびその他のリソースがありますが、一度アクセスすると、このプロセスは機能します。

データベースにインタラクティブにアクセスする必要がある場合は、エミュレーター(既にsqlite3が含まれている)でアプリを実行するか、デバイスの/ xbinパスにsqliteをインストールすることをお勧めします


9
  1. ターミナルを開く
  2. cd <ANDROID_SDK_PATH>(Windowsの私にとってcd C:\Users\Willi\AppData\Local\Android\sdk
  3. cd platform-tools
  4. adb shell (これは、1つのエミュレーターのみが実行されている場合にのみ機能します)
  5. cd data/data
  6. su (スーパーユーザー権限を取得します)
  7. cd <PACKAGE_NAME>/databases
  8. sqlite3 <DB_NAME>
  9. SQLステートメントを発行します(重要:ステートメントをで終了します;。そうでない場合、ステートメントは発行されず、代わりに改行になります。)

注:ディレクトリの内容を一覧表示する必要がある場合は、ls(Linux)またはdir(Windows)を使用してください。


8

adbと入力すると何が表示されますか?

step1. >adb shell
step2. >cd data/data
step3. >ls -l|grep "your app package here"
step4. >cd "your app package here"
step5. >sqlite3 xx.db

ええと...どこに入力すればいいのかわかりませんadb... SQLite3シェルで...>入力すると、コマンドが継続することを期待しています。基本的にを待ってい;ます。セミコロンをerror: near "adb": syntax error入力adb shellすると...コマンドプロンプトに入力すると、adbは認識されたコマンドではないことがわかります...パスファイルにadbを追加する必要がありますか?
Terence Chow

最初に:adbシェルに入る必要があります(macまたはlinux:ターミナルで実行します; windows:cmdで実行します);次に、adbシェルで共通のsqlite3を実行します。
log1000 2013

1
ADBシェルからsqlite3コマンドを実行するにはどうすればよいですか?それは言う:/system/bin/sh: sqlite3: not found...そして私はすでにパス変数としてSQLite3とADBを追加しました...
Terence Chow

?どのようなデバイス、あなたが使用し、これがヒントOU与えるたい stackoverflow.com/questions/3645319/...
log1000

5

Stethoこれをbuild.gradleファイルに追加すると、と呼ばれる非常に優れたツールを使用できます。

compile 'com.facebook.stetho:stetho:1.4.1'

そしてそれをあなたのApplicationorActivity onCreate()メソッドの中で初期化しました:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Stetho.initializeWithDefaults(this);
    setContentView(R.layout.activity_main);
}

次に、アドレスのchromeでdbレコードを表示できます。

chrome://inspect/#devices

詳細については、私の投稿を読むことができます:データベースレコードを簡単に表示する方法


4

デバイスによっては、adbシェルにsqlite3コマンドが見つからない場合があります。その場合、あなたはこれに従うことを望むかもしれません:

adbシェル

$ run-as package.name
$ cd ./databases/
$ ls -l#現在の権限を検索します-r = 4、w = 2、x = 1
$ chmod 666 ./dbname.db
$ exit
$ exit
adb pull / data /data/package.name/databases/dbname.db〜/ Desktop /
adb push〜 / Desktop / dbname.db /data/data/package.name/databases/dbname.db
adb shell
$ run-as package.name
$ chmod 660 ./databases/dbname.db#元の権限を復元する
$ exit
$ exit

参考のためにhttps://stackoverflow.com/a/17177091/3758972にアクセスしてください

上記の手順を実行すると、「リモートオブジェクトが見つかりません」というメッセージが表示される場合があります。次に、データベースフォルダのアクセス許可をadbシェルで755に変更します。

$ chmod755データベース/

ただし、Androidバージョン<21でのみ機能することに注意してください。


これを試しましたが(「adbshel​​l」で始まり、「chmod」を実行し、次にデータベースの「adb pull」を実行します)、「adb:error:failed to stat remote object '/ path / to / db':許可が拒否されました」エラー。そして、「chmod666」は機能しているようでした(とにかくエラーはありませんでした)。以前はAndroidデバイスモニターを使用してdbファイルをプルできましたが、今試してみると、最初の「データ」ディレクトリを展開することすらできません。エミュレータウィンドウを実行していて実行していないAndroidデバイスモニターを試しましたが、同じ結果になりませんでした。神これは愚かです。
clamum

新しいハックとして、すべてのデータとネットワークの監視目的でstethoライブラリを使用できます。github.com/facebook/stetho
Niteshバーマ

うーん、ええ、私はステトを使わなければならないと思います。以前に推奨されているのを見ましたが、SQLクエリを実行できることに気づかなかったので、うまくいきます。私はもうChromeブラウザーを使用していませんが、それをインストールすることでAndroidデータベースに対して検査とクエリを実行できる場合は、それを実行します。Androidデバイスモニターの方法が非常に高速だったわけではありません。データベースをプルしてから、とにかく別のアプリで開く必要があります。Niteshに感謝します。
clamum
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.