web-dev-qa-db-ja.com

デバイス上のsqliteデータベースの場所

SQLiteOpenHelperを拡張してonCreate()をオーバーライドするデフォルトの方法で、プログラムでsqliteデータベースを作成しました。このようにして、必要なときにデータベースがその場で作成されます。

OS Xマシンのdbファイルの内容をsqliteブラウザで確認したいのですが。 dbファイルの名前は知っていますが、デバイス上で見つけることができません。 USB経由でデバイスに接続し、Finderとターミナルで調べましたが、dbファイルが見つかりません。

Androidデバイス上のsqliteデータベースのデフォルトの場所は何ですか?

95
Pompair

<your-database-name>という名前の作成したデータベースを見つけることができます

//data/data/<Your-Application-Package-Name>/databases/<your-database-name>

エクスプローラーを使用して引き出し、名前を.db3拡張子に変更してSQLiteExplorerで使用します

DDMSのファイルエクスプローラを使用して、エミュレータディレクトリに移動します。

91
Shardul

このために、私がしたことは

File f=new File("/data/data/your.app.package/databases/your_db.db3");
FileInputStream fis=null;
FileOutputStream fos=null;

try
{
  fis=new FileInputStream(f);
  fos=new FileOutputStream("/mnt/sdcard/db_dump.db");
  while(true)
  {
    int i=fis.read();
    if(i!=-1)
    {fos.write(i);}
    else
    {break;}
  }
  fos.flush();
  Toast.makeText(this, "DB dump OK", Toast.LENGTH_LONG).show();
}
catch(Exception e)
{
  e.printStackTrace();
  Toast.makeText(this, "DB dump ERROR", Toast.LENGTH_LONG).show();
}
finally
{
  try
  {
    fos.close();
    fis.close();
  }
  catch(IOException ioe)
  {}
}

これを行うには、アプリにSDカードへのアクセス許可が必要で、manifest.xmlに次の設定を追加します

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />

素晴らしい方法ではありませんが、機能します。

44
RRTW

コンテキストには多くのパス関数が含まれています:Context.getXXXPath()
そのうちの1つは、dbnameというデータベースの絶対パスを返すAndroid.content.Context.getDatabasePath(String dbname)です。

Context ctx = this; // for Activity, or Service. Otherwise simply get the context.
String dbname = "mydb.db";
Path dbpath = ctx.getDatabasePath(dbname);

この場合、返されるパスは次のようになります。

/data/data/com.me.myapp/databases/mydb.db

SQLiteOpenHelperを使用してDBを開く場合、このパスは自動生成されることに注意してください。

25
Shoham

実際のデバイスについて話している場合は、/data/data/<application-package-name>にアクセスできません。ルート権限が必要です...

23
barmaley

これは古い質問ですが、回答することは他の人を助けるかもしれません。

Androidがデータベースを保存するデフォルトのパスは、ルート化されていないデバイスにはアクセスできません。したがって、データベースファイルにアクセスする最も簡単な方法(デバッグ環境のみ)は、クラスのコンストラクターを変更することです。

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
    MySQLiteOpenHelper(Context context) {
        super(context, "/mnt/sdcard/database_name.db", null, 0);
    }
}

以下の行を使用して、実稼働環境に変更することを忘れないでください。

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
    MySQLiteOpenHelper(Context context) {
        super(context, "database_name.db", null, 0);
    }
}
16
RandomUser

/data/data/packagename/databases/

すなわち

/data/data/com.example.program/databases/

12
Ray Britton

SQLiteデータベースは単なるファイルです。そのファイルを取り出して移動したり、別のシステムにコピーしたりすることもできます(たとえば、電話からワークステーションに)。それで問題なく動作します。 Androidは、/data/data/packagename/databases/ディレクトリにファイルを保存します。 Eclipseでadb commandまたはFile Explorer viewWindow > Show View > Other... > Android > File Explorer)を使用して、表示、移動、または削除できます。

9

まあこれは遅いかもしれませんが、助けになります。データベースにアクセスできますwithout adbを介したデバイスのルート化

cmdを使用してadbを起動し、次のコマンドを入力します

-run-as com.your.package  
-Shell@Android:/data/data/com.your.package $ ls  
cache  
databases  
lib  
shared_prefs  

これで、ここから開くことができます。

8
Ahmad Ali Nasir

パスを指定せずにdbをファイルとして指定する場合、そのフォルダを取得する最も一般的な方法は次のとおりです。

final File dbFile = new File(getFilesDir().getParent()+"/databases/"+DBAdapter.DATABASE_NAME);

ここで、DBAdapter.DATABASE_NAMEは、「mydatabase.db」のようなStringです。
Context.getFilesDir()は、次のようなアプリのファイルのパスを返します。/data/data/<your.app.packagename>/files/は、.getParent()+"/databases/"を使用して、「ファイル」を削除し、代わりに「データベース」を追加する必要がある理由です。
BTW Eclipseは、ハードコーディングされた「data/data /」文字列について警告しますが、この場合は警告しません。

5
Stan
By Default it stores to:    

String DATABASE_PATH = "/data/data/" + PACKAGE_NAME + "/databases/" + DATABASE_NAME;

Where:

String DATABASE_NAME = "your_dbname";
String PACKAGE_NAME = "com.example.your_app_name";

データベースがデバイスストレージに保存されているかどうかを確認します。その場合、Manifest.xmlでアクセス許可を使用する必要があります。

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
3

Adb Shell how-to を使用してアクセスできます

上記のリンクのコンテンツ:

チュートリアル:コマンドラインを使用してAndroidデータベースにアクセスする方法。プログラムでデータベースの処理を開始するとき、プログラムの外部でデータベースに直接アクセスし、プログラムが実行したことを確認し、デバッグできることが非常に重要で便利です。

また、Androidでも重要です。

その方法は次のとおりです。

1)エミュレータを起動します(または実際のデバイスをPCに接続します)。通常、このためにEclipseからプログラムの1つを起動します。 2)Android toolsディレクトリでコマンドプロンプトを起動します。 3)adb Shellと入力します。これにより、エミュレーター/接続されたデバイスでUNIXシェルが起動します。 4)データベースがあるディレクトリに移動します:cd data/dataここにデバイス上のすべてのアプリケーションのリストがありますアプリケーションディレクトリに移動します(Unixでは大文字と小文字が区別されます!!)cd com.alocaly.LetterGame and descendデータベースディレクトリ内:cdデータベースここでは、すべてのデータベースを見つけることができます。私の場合、1つだけです(現在):SCORE_DB 5)チェック/変更したいデータベースでsqliteを起動します:sqlite3 SCORE_DBここから、存在するテーブルを確認できます:.tables 6)必要なSQL命令を入力してください:スコアから*を選択します。

これは非常に簡単ですが、必要になるたびに、どこにあるかわかりません。

3
Dawid Drozd

アプリケーションがデータベースを作成する場合、このデータベースはデフォルトでディレクトリDATA/data/APP_NAME/databases/FILENAME.に保存されます

上記のディレクトリの部分は、次の規則に基づいて構築されます。 DATAは、Environment.getDataDirectory()メソッドが返すパスです。 APP_NAMEはアプリケーション名です。 FILENAMEは、データベースのアプリケーションコードで指定する名前です。

1
Xar E Ahmer

次のようにデータベース名を定義します。

private static final String DATABASE_NAME = "/mnt/sdcard/hri_database.db";

データベースは次の場所で確認できます。

storage/sdcard0/yourdatabasename.db
0
Pankaj Arora

パブリッククラスMySQLiteOpenHelperはSQLiteOpenHelperを拡張します{MySQLiteOpenHelper(Context context){super(context、 "/mnt/sdcard/database_name.db"、null、0); }}

「/ sdcard /」をハードコードしないでください。代わりにEnvironment.getExternalStorageDirectory()。getPath()を使用してください

0
Namo

また、IDEにEclipseのDDMSパースペクティブのようなユーティリティがあるかどうかを確認できます。ユーティリティを使用すると、ディレクトリを閲覧したり、エミュレータまたはルートデバイスとの間でファイルをコピーしたりできます。

0
korosmatick