標籤:exists -- cat nsa tables table rri database catch
升級:重寫onUpgrade方法
- 確定 相鄰版本 的差別,從版本1開始依次迭代更新,先執行v1到v2,再v2到v3……
- 為 每個版本 確定與現在資料庫的差別,為每個case撰寫專門的升級代碼。
降級
onDowngrade()資料庫降級:比如從資料庫4降級到資料庫3必須重寫該方法。
@Override public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { super.onDowngrade(db, oldVersion, newVersion); }
遷移資料:
- 將現有表重新命名為暫存資料表;
- 建立新表;
- 將暫存資料表的資料匯入新表(注意處理修改的列);
- 刪除暫存資料表。
protected void upgradeTables(SQLiteDatabase db, String tableName, String columns) { try { db.beginTransaction(); // 1, 將現有表重新命名為暫存資料表 String tempTableName = tableName + "_temp"; String sql = "ALTER TABLE " + tableName +" RENAME TO " + tempTableName; execSQL(db, sql, null); // 2, 建立新表 //onCreateTable(db); createNewTableX(db); // 3, 將暫存資料表資料匯入新表中 sql = "INSERT INTO " + tableName + " (" + columns + ") " + " SELECT " + columns + " FROM " + tempTableName; execSQL(db, sql, null); // 4, 刪除暫存資料表 execSQL(db, "DROP TABLE IF EXISTS " + tempTableName, null); db.setTransactionSuccessful(); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { db.endTransaction(); } }
Android -- 面試 -- 資料庫升級策略