2011-07-08 22 views
6

我使用Ormlite從我的Android應用程序(在摩托羅拉Xoom上運行)中保存一些數據。默認情況下,sql數據庫保存到/ data/data/[軟件包名稱]/databases/[dbname] .db。麻煩的是,Xoom沒有根,因此用戶無法訪問保存數據庫的目錄(無法複製/備份/編輯數據庫的內容)。Android,Ormlite,DB位置

我已經添加了一些額外的代碼到其中一個類中,將數據庫從/ data複製到SD卡上,這很好,但實際上我認爲應該可以設置數據庫的存儲路徑。我錯過了什麼,或者這對Ormlite來說是不可能的?

由於提前, Ç

+0

您是否試圖將數據保存到其他位置?我不清楚你到底想做什麼。 –

回答

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卡上。如果用戶正在從它複製數據,則應用程序將無法訪問它。我會提供一個'備份'功能,可以在SD卡上以XML,JSON或CSV的格式創建一個文件。然後,用戶需要備份到遠程存儲,並且您知道您將始終能夠訪問您的數據庫。除非你想創建一個臨時存儲,並且在它成爲可用的時候將所有內容合併到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不可用時(例如,當它連接到PC時)DB不可訪問 此外,任何人都可以閱讀,這可能是專業人士或騙子。

使用context.getExternalFilesDir()而不是Environment.getExternalStorageDirectory()將使用特定於您的應用程序的位置,該位置在卸載後會自動清除(在應用程序更新時它也會出現在2.2上)。

P.S.我在某處讀到這種方法可能無法在2.2之前的Android版本上運行(?)