SQLiteOpenHelper
を拡張してonCreate()
をオーバーライドするデフォルトの方法で、プログラムでsqliteデータベースを作成しました。このようにして、必要なときにデータベースがその場で作成されます。
OS Xマシンのdbファイルの内容をsqliteブラウザで確認したいのですが。 dbファイルの名前は知っていますが、デバイス上で見つけることができません。 USB経由でデバイスに接続し、Finderとターミナルで調べましたが、dbファイルが見つかりません。
Androidデバイス上のsqliteデータベースのデフォルトの場所は何ですか?
<your-database-name>
という名前の作成したデータベースを見つけることができます
に
//data/data/<Your-Application-Package-Name>/databases/<your-database-name>
エクスプローラーを使用して引き出し、名前を.db3拡張子に変更してSQLiteExplorerで使用します
DDMSのファイルエクスプローラを使用して、エミュレータディレクトリに移動します。
このために、私がしたことは
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" />
素晴らしい方法ではありませんが、機能します。
コンテキストには多くのパス関数が含まれています: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を開く場合、このパスは自動生成されることに注意してください。
実際のデバイスについて話している場合は、/data/data/<application-package-name>
にアクセスできません。ルート権限が必要です...
これは古い質問ですが、回答することは他の人を助けるかもしれません。
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);
}
}
/data/data/packagename/databases/
すなわち
/data/data/com.example.program/databases/
SQLiteデータベースは単なるファイルです。そのファイルを取り出して移動したり、別のシステムにコピーしたりすることもできます(たとえば、電話からワークステーションに)。それで問題なく動作します。 Androidは、/data/data/packagename/databases/
ディレクトリにファイルを保存します。 Eclipseでadb command
またはFile Explorer view
(Window > Show View > Other... > Android > File Explorer
)を使用して、表示、移動、または削除できます。
まあこれは遅いかもしれませんが、助けになります。データベースにアクセスできますwithout adbを介したデバイスのルート化
cmdを使用してadbを起動し、次のコマンドを入力します
-run-as com.your.package
-Shell@Android:/data/data/com.your.package $ ls
cache
databases
lib
shared_prefs
これで、ここから開くことができます。
パスを指定せずに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 /」文字列について警告しますが、この場合は警告しません。
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" />
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命令を入力してください:スコアから*を選択します。
これは非常に簡単ですが、必要になるたびに、どこにあるかわかりません。
アプリケーションがデータベースを作成する場合、このデータベースはデフォルトでディレクトリDATA/data/APP_NAME/databases/FILENAME.
に保存されます
上記のディレクトリの部分は、次の規則に基づいて構築されます。 DATAは、Environment.getDataDirectory()メソッドが返すパスです。 APP_NAMEはアプリケーション名です。 FILENAMEは、データベースのアプリケーションコードで指定する名前です。
次のようにデータベース名を定義します。
private static final String DATABASE_NAME = "/mnt/sdcard/hri_database.db";
データベースは次の場所で確認できます。
storage/sdcard0/yourdatabasename.db
パブリッククラスMySQLiteOpenHelperはSQLiteOpenHelperを拡張します{MySQLiteOpenHelper(Context context){super(context、 "/mnt/sdcard/database_name.db"、null、0); }}
「/ sdcard /」をハードコードしないでください。代わりにEnvironment.getExternalStorageDirectory()。getPath()を使用してください
また、IDEにEclipseのDDMSパースペクティブのようなユーティリティがあるかどうかを確認できます。ユーティリティを使用すると、ディレクトリを閲覧したり、エミュレータまたはルートデバイスとの間でファイルをコピーしたりできます。