web-dev-qa-db-ja.com

/ sdcardにSQLiteデータベースをダウンロードしてAndroidアプリからアクセスできますか?

.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ラッパー/フレームワークを使用してそのようなデータベースにアクセスする方法はありますか?

上記の答えが「いいえ」の場合、他にどのようなオプションがありますか?私のデータはリレーショナルモデルで非常によく表現されていますが、大きすぎます。さらに、アプリ全体を再インストール/アップグレードせずにデータを更新できるようにしたいと考えています。

32
kzyapkov

もちろんできます。ドキュメントには制限が課されていないとも書かれているため、これについては少し矛盾しています。相対パスは上記の場所にあり、そこにあるデータベースはプライベートであると彼らは言うべきだと思います。必要なコードは次のとおりです。

File dbfile = new File("/sdcard/mydb.sqlite" ); 
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
System.out.println("Its open? "  + db.isOpen());
44
AdamC

これを試して:

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());
7
Iwan

次のコードを共有します。宣言する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();
1
Sergio

これをチェックしてください...

SDカードにAndroidアプリケーションデータを保存

1
Rabih harb

ただのアイデア:

  • database.dbをassetsフォルダーに配置できます。

  • database.dbファイルが2Mbより大きい場合、システムはそれを圧縮できないため、他の1つのオプションが必要です。

  • database.dbの名前を、たとえばdatabase.jitやdatabase.mp3-に変更できます。これらは圧縮されていませんが、最初の実行時に名前をdatabase.dbに変更できます。

1
Barna