2012-01-31 58 views
2

我試圖將我的數據庫從內部存儲複製到外部,但它不復制數據庫。它只是創建一個新的空的sqlite文件。任何想法我實際上錯過了什麼?android將數據庫從內部複製到外部存儲返回空數據庫

這裏是我使用的是什麼:

public static void copyFile(String currentDBPath, String backupDBPath){ 
    try { 
     File sd = Environment.getExternalStorageDirectory(); 
     //File data = Environment.getDataDirectory(); 

     if (sd.canWrite()) { 
      File currentDB = new File(currentDBPath); 
      File backupDB = new File(backupDBPath); 

      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) { 
     e.printStackTrace(); 
    } 
} 

,並使用它像這樣:

File database = new File("/sdcard/Stam/Data/"); 
     database.mkdirs(); 
     RPCCommunicator.copyFile("/data/data/" + this.getPackageName()+ "/databases/stam_sys_tpl.sqlite","/sdcard/Stam/Data/system.sqlite"); 

所以用這個,它創造了system.sqlite,但它沒有任何的表是空的。我想要做的是將數據庫從當前目錄移動到新數據庫而不丟失任何數據。

任何想法,爲什麼它不能正常工作?

+0

是你確定擴展名是.sqlite而不是.db? – 2012-01-31 11:46:29

+0

我很確定 – 2012-01-31 11:47:39

+0

通常最好不要假定外部存儲稱爲「/ sdcard」 - 總是使用Environment#getExternalStorageDirectory()。另外,不要手動構建數據庫文件的路徑,請使用Context#getDatabasePath(「stam_sys_tpl.sqlite」)。 – Jens 2012-01-31 12:41:36

回答

1

您無法將數據庫文件複製到外部存儲。

您可以在外部存儲器中創建新的數據庫。

查詢內部數據庫,並在新的數據庫中插入您已經創建

+1

聽起來很奇怪。使用簡單的表格和直接複製工作在Android 2.3上工作得很好。 – Jens 2012-01-31 12:49:45

2

使用Context.getDataBasePath()讓你的數據庫文件!

相關問題