2011-07-08 13 views
6

私はOrmliteを使用して、Androidアプリ(Motorola Xoom上で実行中)からデータの一部を保持しています。デフォルトでは、sqlデータベースは/ data/data/[パッケージ名]/databases/[dbname] .dbに保存されます。問題は、Xoomはルートされていないため、ユーザーはdbが保存されているディレクトリにアクセスすることができません(dbのコンテンツをコピー/バックアップ/編集できません)。Android、Ormlite、DBロケーション

私はdbから/ dataをsdカードにコピーするためにいくつかのコードを追加しましたが、これはうまくいきますが、実際にはdbが格納されている場所のパスを設定できるはずです。 Ormliteで何かが見当たりませんか、これはできませんか?事前に

おかげで、 C

+0

データを別の場所に保存しようとしていますか?私はあなたがしたいことが何であるかについては不明です。 –

答えて

1

はありません、あなたは、データベースに直接アクセスすることはできません。そのディレクトリにadb shellcdを使用できます。 そのトピックに関するいくつかのヒントを以下に示します。 http://developer.android.com/guide/developing/tools/adb.html#sqlite

そして、Ormliteには何があるのか​​分かりません。

2

https://stackoverflow.com/a/3911641の男のようなことができます。

dbトランザクションを実行するオブジェクトを作成すると、getReadableDatabaseおよびgetWriteableDatabaseがカスタムパスを使用するように上書きされます。このようなもの:

@Override 
public synchronized SQLiteDatabase getWritableDatabase(){ 
    return SQLiteDatabase.openDatabase("/sdcard/mydatabase.db", null, SQLiteDatabase.OPEN_READWRITE); 
} 

@Override 
public synchronized SQLiteDatabase getReadableDatabase(){ 
    return SQLiteDatabase.openDatabase("/sdcard/mydatabase.db", null, SQLiteDatabase.OPEN_READONLY); 
} 

私はあなたのアプリを書いていた場合、私はSDカードにDBを置くことはありません。ユーザーがそこからデータをコピーしている場合、アプリケーションはアクセスできなくなります。 XML、JSON、CSVなどのファイルをSDカードに作成する「バックアップ」機能を提供します。それから、リモートストレージにバックアップするのはユーザーに任され、いつでもあなたのdbにアクセスできることがわかります。あなたが一時的なストレージを作成し、それがavalibleになったときにsdカードにすべてをマージする場合を除き...しかし、それは価値があるより多くの仕事のように聞こえる。これがあなたの質問に答えることを願っています

6

あなたは

public class DatabaseHelper extends OrmLiteSqliteOpenHelper { 
[...] 
public DatabaseHelper(final Context context) { 
    super(context, Environment.getExternalStorageDirectory().getAbsolutePath() 
    + File.separator + DATABASE_NAME, null, DATABASE_VERSION); 
} 

このようなものを使用する場合は、SDカード上にデータベースを作成することができ、例えばデシベルでファイルを作成します/mnt/sdcard/Android/data/com.your.app/files/myData.sqlite Pro:内部メモリを節約 Con:SDCardが利用できないときにDBにアクセスできない(例:PCに接続しているとき) また、それは、プロであろうと詐欺であろうとも、誰でも読むことができます。

Environment.getExternalStorageDirectory()の代わりにcontext.getExternalFilesDir()を使用すると、アプリに固有の場所が使用され、アンインストール後に自動的にクリーンアップされます(アプリケーションアップデートでも2.2に表示されます)。

P.S.私はこのアプローチが2.2より前のAndroidバージョンでは機能しないかもしれないとどこか読んでいました。

関連する問題