2012-05-25 82 views
0

我使用SQL數據庫在我appliaction,在我想拿database.I的備份有以下疑點:數據庫備份的Android

1.I正在運行的仿真器的應用,用於檢測是否我必須插入一些外部存儲器來檢查,如果不在我的系統中,我該如何檢查。 2.我在我的應用程序中使用了下面的代碼,因爲sdcard.write選項顯示爲false,這是什麼錯誤。

Follwing是我的代碼:

try { 
        File sd = Environment.getExternalStorageDirectory(); 
        File data = Environment.getDataDirectory(); 

        java.lang.System.out.println("data="+sd.getAbsolutePath()); 
java.lang.System.out.println("data="+sd.canWrite());--->Showing as false 

        if (sd.canWrite()) { 
         String currentDBPath = "\\data\\com.budget\\databases\\budget"; 
         String backupDBPath = "budget"; 
         File currentDB = new File(data, currentDBPath); 
         File backupDB = new File(sd, backupDBPath); 

         java.lang.System.out.println("backup="+backupDB.getAbsolutePath()); 

         if (currentDB.exists()) { 
          FileChannel src = new FileInputStream(currentDB).getChannel(); 
          FileChannel dst = new FileOutputStream(backupDB).getChannel(); 
          dst.transferFrom(src, 0, src.size()); 
          src.close(); 
          dst.close(); 
         } 
        } 
       } catch (Exception e) { 
       } 

回答

0

文件擴展名(.db)缺少在上面摘錄:在安卓

currentDBPath = "\\\data\\\com.budget\\\databases\\\budget.db"; 
+0

感謝Harald ..但在我的情況下,if(sd.canWrite()) - >本身顯示爲false,因此它不會進入該if循環。 – subbu

0

數據備份Documentation。 如果您的Android應用程序有一個數據庫,並且您希望您的用戶能夠備份數據庫並按照他們認爲合適的方式進行恢復,那麼您需要熟悉數據庫文件。

下面是一個名爲DbExportImport的類。一旦你設置了正確的值,你需要做的就是從你的應用程序中調用exportDb(),importDb()或者restoreDb()來執行必要的操作。 (More

由於您的應用程序將被新安裝並且您將丟失數據庫,因此在更改應用程序簽名的軟件包名稱或密鑰時,這也可用作臨時措施。

但是,如果需要,可能需要直接擴展BackupAgent:*備份數據庫中的數據。如果您有用戶重新安裝應用程序時想要恢復的SQLite數據庫,則需要構建自定義的BackupAgent,以在備份操作期間讀取適當的數據,然後創建表並在還原操作期間插入數據( More)。

現在你也可以從SD卡Backup and restore SQLite database to sdcard

這裏備份是另一種解決方案就像你的problem

+0

感謝Google_Android_Lovers.How我可以知道一個SD卡是否存在或不存在。現在我正在模擬器中運行應用程序,所以如何檢查數據庫packup.Whether我不得不插入一些外部內存來檢查。另外在我的情況外部存儲狀態顯示爲「已刪除」。 – subbu

0

如果您使用的是Eclipse,請轉至Window - Android Virtual Device Manager,選擇您正在使用的AVD並單擊編輯,在硬件選項中選擇新建,然後選擇SD卡支持。然後,只需定義存儲大小並單擊編輯AVD即可保存更改。 要檢查是否SD安裝使用:

if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){ 
    //code for sd mounted 
}else{ 
    //code for sd not mounted 
} 

檢查,如果你已經設置好的清單中的權限。

<manifest ... 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
</manifest>