對于已經釋出的app,進行資料庫版本更新時,必須要考慮使用者原有的舊資料是否能夠相容新版本資料庫,最基礎的做法就是将備份資料導入app新版本中,進行全面測試,判斷應用程式是否出錯,但這種做法很難做到萬無一失,而且耗費成本非常高,而還有一種簡單有效的方法就是寫單元測試,
目前,更新資料庫的時候,我的基本思路是,舊資料庫檔案copy到目前app應用資料庫檔案中,然後重新new DbHelper(),并
getWritableDatabase();
具體代碼
@Test
public void upgradeVersionToV8() throws IOException, InterruptedException {
/**
* 資料庫版本:v5 -> v8
*/
DataBaseAdapter dataBaseAdapterV5toV8;
String dbPathV5toV8 = mContext.getDatabasePath("dbName.db").getPath(); //資料庫預設路徑
File dbV5 = new File("src/test/java/com/xxxxx/database_v5.db"); //備份資料庫路徑
String dbV5Path = dbV5.getAbsolutePath();
FileChannel dbNewV5toV8 = new FileOutputStream(dbPathV5toV8).getChannel(); //目标資料
FileChannel dbOldV5 = new FileInputStream(dbV5Path).getChannel(); //源資料
dbNewV5toV8.transferFrom(dbOldV5, 0, dbOldV5.size());
dbNewV5toV8.close();
dbOldV5.close();
dataBaseAdapterV5toV8 = new DataBaseAdapter(mContext);
dataBaseAdapterV5toV8.open();
System.out.println(dbPathV5toV8);
DataBaseAdapter的open方法具體邏輯
/**
* 打開資料庫,傳回資料庫對象
*
* @throws SQLException
*/
public void open() throws SQLException {
if (isOpen()) {
return;
} else {
mDbHelper = new DbHelper(mContext, DATABASE_NAME, DATABASE_VERSION);
mSQLiteDatabase = mDbHelper.getWritableDatabase();
}
}
然後就可以通過Assert斷言去進行相應的判斷,備份資料與目前資料庫同步