2011-09-04 41 views
0

我很新的android和我試圖導出我的數據庫到SD卡,所以我可以將其導入到我的其他應用程序。試圖將數據庫導出到SDCARD

有什麼建議嗎?

Thanx提前。

+0

你能否詳細到底爲什麼你要這個,如果這個交換應該在兩個方向進行,等等 - 這聽起來像你可能想要共享userId或ContentProvider。 –

+0

我有一個免費版本的應用程序。然後我做了一個有一些很好的升級。但我希望用戶能夠將其當前數據庫導出到SDCARD,然後導入到付費版本。 – william

+1

您是否搜索過[實現免費/付費Android應用程序]的更一般問題(http://stackoverflow.com/search?q=android+%2Bfree+%2Bpaid)?這裏有一些很好的答案,從共享用戶ID到免費的應用程序和付費的「解鎖」應用程序,無需重複您的整個應用程序。 –

回答

0

儘管這可能不是您嘗試執行的最佳解決方案,但您的數據庫已存儲在/data/data/your.package.name中。您只需將其作爲文件加載並保存到SD卡即可。檢查這裏的,這是否代碼:

http://www.screaming-penguin.com/node/7749

+0

好的,在這種情況下,我將如何從一個本地數據庫導入到另一個本地數據庫?而不是導出到SDCARD然後再導入回來。 – william

+1

您可以在免費應用程序中創建一個內容提供程序,將整個數據庫暴露給其他應用程序。然後在付費應用程序的第一次運行中,創建一個新的空數據庫,通過查詢Content Provider並填寫新數據庫從原始應用程序獲取數據。 –

1

出口例如:

public void exportDB(){ 
    try { 
     File sd = Environment.getExternalStorageDirectory(); 
     if (sd.canWrite()) { 
      String currentDBPath = "data/data/com.mypack.myapp/databases/mydb.db"; 
      String backupDBPath = sd + "/filename.db"; 
      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(); 
    } 
} 

導入是非常相似的出口:

public void importDB(){ 
    try { 
     File sd = Environment.getExternalStorageDirectory(); 
     if (sd.canWrite()) { 
      String currentDBPath = sd + "/filename.db"; 
      String backupDBPath = "data/data/com.mypack.myapp/databases/mydb_2.db"; 
      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(); 
    } 
}