面試遇到問題總結二

1、安卓sqlite3數據庫跨版本升級操作

安卓數據庫升級

sqlite數據庫升級

    直接安裝最新版本的APP,走onCreate方法,所以在數據庫版本修改升級的時候,修改onCreate方法創建最新的數據庫表格;

    APP升級操作,數據庫有變更的話:走onUpgrade方法,在此方法裏面,判斷舊的APP版本號,根據不同版本號的數據庫,進行一個循環操作,循環從當前版本APP到要升級版本APP的版本,添加進來每一版數據庫所做的操作。做相應的添加字段處理。

/**
     * 新版本比舊版本高就會走這個方法
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        for (int i = oldVersion; i < newVersion; i++) {
            switch (i) {
                case DataBaseConfig.DATABASE_FIRST_VERSION:
                    updateUpgradeToVersion2(db);//修改表原有字段並新增字段
                    break;
                default:
                    break;
            }
        }
    }
private void updateUpgradeToVersion2(SQLiteDatabase db) {
        try{
            db.beginTransaction();
            // 1, 將表TABLE_TEST1重命名爲TABLE_TEST1+"_temp"
            String tempTableName = DataBaseConfig.TABLE_TEST1 + "_temp";
            String sql = "ALTER TABLE " + DataBaseConfig.TABLE_TEST1 + " RENAME TO " + tempTableName;
            db.execSQL(sql);
            // 2, 創建用戶表(字段id、name改變、並新增了以個字段phone)
            db.execSQL(DataBaseConfig.NEW_VERSION_INFO);
            // 3, 將舊錶數據導入到新表中,舊錶中的id,name,age分別查到新表中的id,name,sign
            sql = "INSERT INTO " + DataBaseConfig.TABLE_TEST1 + " (" + "id,name,sign" + ") " + " SELECT " + "id,name,age" + " FROM " + tempTableName;
            db.execSQL(sql);
            // 4, 刪除舊的表
            db.execSQL("DROP TABLE IF EXISTS " + tempTableName);
            db.setTransactionSuccessful();
            db.setVersion(2);

        }catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            db.endTransaction();
        }

    }

realm數據版本升級

 

litpale數據庫版本升級

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章