.apkにファイルをバンドルして/ sdcardに保存する方法がないことはすでにわかっています。これまでのところ、最初の実行時に大きなファイルをダウンロードするのが最善の方法です。 sqlite dbをapkにバンドルし、SQLiteDatabaseでアクセスできるようにコピーする方法を説明するチュートリアルに出くわしました(したがって、必要なスペースが2倍になり、/ sdcardはまったく使用されません)。
http://developer.Android.com/guide/topics/data/data-storage.html#db は、すべてのデータベースが/ data/data/package_name/databasesになければならないことを示しています。
本当にそうですか?フレームワークをだまして/ sdcardパーティションに配置されたデータベースを開く方法はありますか?別のSQLite Javaラッパー/フレームワークを使用してそのようなデータベースにアクセスする方法はありますか?
上記の答えが「いいえ」の場合、他にどのようなオプションがありますか?私のデータはリレーショナルモデルで非常によく表現されていますが、大きすぎます。さらに、アプリ全体を再インストール/アップグレードせずにデータを更新できるようにしたいと考えています。
もちろんできます。ドキュメントには制限が課されていないとも書かれているため、これについては少し矛盾しています。相対パスは上記の場所にあり、そこにあるデータベースはプライベートであると彼らは言うべきだと思います。必要なコードは次のとおりです。
File dbfile = new File("/sdcard/mydb.sqlite" );
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
System.out.println("Its open? " + db.isOpen());
これを試して:
String dir = Environment.getExternalStorageDirectory().getPath()
File dbfile = new File(dir+"/mydb.sqlite");
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
System.out.println("Its open? " + db.isOpen());
次のコードを共有します。宣言するopcionesMenu Vector<String>
Vector < String > opcionesMenu = new Vector< String >();
// the database is SDCard. I saw the code to Blackberry (net.rim)
String rutaDB = "/storage/extSdCard/Android/databases/Offshore.db";
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(rutaDB, null);
Cursor cursor = db.rawQuery("SELECT Codigo, Nombre FROM Ruta ORDER BY Codigo, Nombre", null);
if (cursor.moveToFirst())
{
do
{
opcionesMenu.add(cursor.getString(0) + " - " + cursor.getString(1));
} while(cursor.moveToNext());
}
db.close();
これをチェックしてください...
ただのアイデア:
database.dbをassetsフォルダーに配置できます。
database.dbファイルが2Mbより大きい場合、システムはそれを圧縮できないため、他の1つのオプションが必要です。
database.dbの名前を、たとえばdatabase.jitやdatabase.mp3-に変更できます。これらは圧縮されていませんが、最初の実行時に名前をdatabase.dbに変更できます。