2013-02-04 52 views
6

我正在做一個使用sqlite數據庫的應用程序在我的應用程序中有一個功能,它有一個按鈕「更新數據庫」。如何在android中使用新數據庫文件替換現有的sqlite數據庫文件

當用戶點擊'更新數據庫'按鈕時,我需要使用URL中的新數據庫文件升級舊的數據庫文件。

如何做到這一點。該研究告訴我,我們不能改變一個數據庫,因爲它在.apk文件中。 有沒有解決這個問題的方法。 請幫我一把。 謝謝。

+0

http://stackoverflow.com/questions/9109438/how-to-use-an-existing-database-with-an-android-application/9109728#9109728 –

回答

0

在您的應用程序首次啓動時,您應該將您的數據庫複製到外部/內部存儲器中,從apk文件中刪除。 當您需要更新(使用語句或更換整個數據庫)時,您可以在內部/外部存儲器中正常運行。 當您更新您的應用程序(也可能是新的應用程序內有一個新的數據庫)時,首次啓動新應用程序時,應該替換存儲在內部/外部存儲器中的數據庫。

3

簡單,你可以使用下載管理器下載從URL的數據庫文件,並將文件複製到該路徑

  /data/data/<YOUR PACKAGE NAME>/databases/ 

它會自動update.I使用了這一點,並正在

+0

嗨,你好,我堅持同樣的問題.. dis的任何代碼片段? – ryderz8

+1

他在說要將數據直接複製到應用程序的目錄中。您的應用程序的foo.db文件位於上面的目錄模式中。但在我的情況下,我沒有固定的設備,所以我將無法訪問databse文件夾。你可能只能做一個新的。我用簡單的IO解決了問題,另一個答案。 – StarWind0

+0

我是否也應該在「 .db-journal」文件中做一些事情,比如刪除它? –

3
private void importDatabase(String inputFileName) throws IOException 
{ 
    InputStream mInput = new FileInputStream(inputFileName); 
    String outFileName = YOUR_DB_PATH_HERE; 
    OutputStream mOutput = new FileOutputStream(outFileName); 
    byte[] mBuffer = new byte[1024]; 
    int mLength; 
    while ((mLength = mInput.read(mBuffer))>0) 
    { 
     mOutput.write(mBuffer, 0, mLength); 
    } 
    mOutput.flush(); 
    mOutput.close(); 
    mInput.close(); 
} 

編輯:

您可能會感激它:

How to use an existing database with an Android application

+0

工作就像一個魅力! 其他人的注意事項。我允許使用完全相同的代碼進行修復。畢竟它是一個簡單的拷貝這個文件的功能。 – StarWind0

相關問題