2014-09-04 263 views
2

我在我的應用程序的src/main/assets/databases目錄中有一個數據庫文件。我想下載整個數據庫的新副本(不需要保留任何數據),並覆蓋舊數據庫。我怎樣才能做到這一點SQLiteAssetHelper如何替換(覆蓋整個文件)由SQLiteAssetHelper提供的sqlite數據庫?

我的理解是,SQLiteAssetHelper會檢查數據庫是否「安裝」在設備上,如果不是,將其從src/main/assets/databases目錄中取出,並將其複製到android可以使用的某個位置。由於我無法修改我的應用的資產,SQLiteAssetHelper複製數據庫的位置,以及覆蓋它的正確方法是什麼?

這裏是我的擴展SQLiteAssetHelper,在情況下,它有什麼用途:

import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper; 

public class EnumDatabase extends SQLiteAssetHelper { 

    private static final String DATABASE_NAME = "enums.sqlite3"; 
    private static final int DATABASE_VERSION = 1; 

    public EnumDatabase(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

} 

回答

3

我怎樣才能做到這一點與SQLiteAssetHelper?

刪除舊的數據庫,然後調用您的SQLiteAssetHelpergetReadableDatabase()getWriteableDatabase()。您可以在任何便利的Context上撥打deleteDatabase()來刪除現有的數據庫。儘管如此,請確保您的數據庫首先關閉。

+0

我可能沒有明確。我想從URL下載一個新的數據庫文件(我知道該怎麼做),但是一旦我有了新文件,我該如何覆蓋數據庫?我不想覆蓋使用'assets'文件夾中已經存在的數據庫。 – BLuFeNiX 2014-09-04 20:51:20

+0

@BLuFeNiX:使用'getDatabasePath()'找出在哪裏寫它,並寫在那裏。 'SQLiteAssetHelper'與這個過程無關。 – CommonsWare 2014-09-04 20:52:45

+0

謝謝,我會嘗試。 – BLuFeNiX 2014-09-04 20:53:05

0

您可以獲取文件路徑到您的數據庫文件並覆蓋存儲中的另一個文件。

public class MyDatabase extends SQLiteAssetHelper { 

    private static final String DATABASE_NAME = "wl.db"; 
    private static final int DATABASE_VERSION = 1; 
    public String databasePath = "";  

    public MyDatabase(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     databasePath = context.getDatabasePath("wl.db").getPath(); 
    } 

...

String toPath = db.databasePath; 
if (Environment.getExternalStorageState() != null) { 
    File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyAppFolder"); 
    String fromPath = dir.getAbsolutePath() + "/wl.db"; 
    fileCopy(new File(fromPath), new File(toPath)); 
} 


public void fileCopy(File src, File dst) throws IOException { 
    InputStream in = new FileInputStream(src); 
    OutputStream out = new FileOutputStream(dst); 

    byte[] buf = new byte[1024]; 
    int len; 
    while ((len = in.read(buf)) > 0) { 
     out.write(buf, 0, len); 
    } 
    out.flush(); 
    in.close(); 
    out.close(); 
} 
相關問題