android轻量级无侵入式管理数据库自动升级组件

SpeSqliteManager4Android

改动日志

2023.2.14 完成SQLiteOpenHelper 
2023.2.23 完成room
2023.2.25 完成架构重构
2023.2.26 新增架构设计图说明

介绍

一个轻量级无侵入式管理android数据库自动升级的管理类(支持SQLiteOpenHelper、room)

妈妈再也不用担心写一坨坨的migration或是手动sql去升级数据库

核心设计思想

1.以静制动:配置项代替代码,保证代码稳定性

架构设计

android轻量级无侵入式管理数据库自动升级组件_第1张图片

关配置项json:

  • 1.dbName:数据库文件名称,要保持稳定,不能修改。
  • 2.dbVersion:数据库版本号,判断本地数据库文件是否升级就通过此key,升级时要保证新版本号大于当前的。
  • 3.dbTables:想要创建的表名,每个表名下是具体的字段。

集成步骤

1.导入依赖库

    implementation 'com.google.code.gson:gson:2.8.9'
    implementation "androidx.room:room-runtime:2.0.0"
    annotationProcessor "androidx.room:room-compiler:2.0.0"

2.在assets目录下新建dbupdate.json 注意:dbconfig的配置不要动,自己的表在后面新增

3.SQLiteOpenHelper的调用方法

    //1.直接创建SQLiteOpenHelper
    SpeSqliteOpenHelperService.getInstance(this);
    //2.创建SQLiteOpenHelper且需要监听db
    SpeSqliteOpenHelperService.getInstance(this, new SpeSqliteBaseInterface() {
      @Override
      public  void onCreate(T db, RoomDatabase room) {
               
      }
      @Override
      public  void onOpen(T db, RoomDatabase room) {
                                 
      }
      @Override
      public  void onUpgrade(T db, int oldVersion, int newVersion, RoomDatabase room) {
                                                    
       }
    });                                                                                                                                                                                                                                                                                                                                                                       

4.Room的调用方法

    //3.直接创建room
        SpeSqliteRoomService.getInstance(this,AppDatabase.class);
    //4.创建room,且需要监听db
        SpeSqliteRoomService.getInstance(this,AppDatabase.class,new SpeSqliteBaseInterface() {
            @Override
            public  void onCreate(T db, RoomDatabase room) {
                //TODO  删除测试插入代码
                if(room != null){
                    ServerModel model = new ServerModel();
                    model.setId("1");
                    model.setHost("1");
                    model.setLang("1");
                    model.setName("1");
                    model.setVersion("1");
                    insert(room,model);
                }

            }
            @Override
            public  void onOpen(T db, RoomDatabase room) {

            }

            @Override
            public  void onUpgrade(T db, int oldVersion, int newVersion, RoomDatabase room) {

            }
        });        

核心代码

SpeSqliteUpdateManager 负责针对本地db的创建、新建表、表字段升级、删除表,通过配置的方式去升级数据库,减少代码的改动,核心思想:以静制动

  /**
     * 数据库第一次创建时的调用函数
     * @param db db
     */
    public void create(SQLiteDatabase db){
        SpeSqliteSettingModel currentDBModel = SpeSqliteUpdateManager.getInstance().currentAppDBSetting();
        for(int i=0;i 范型(需考虑SQLiteOpenHelper和room)
     */
    private  void dropTables(T db,SpeSqliteTableSettingModel table){
        String sql = " DROP TABLE IF EXISTS "+table.tableName;
        executeSQL(db,sql);
    }

    /**
     * 老表新增字段
     * @param db db
     * @param _old 老表字段配置
     * @param _new 表新字段配置
     * @param  范型(需考虑SQLiteOpenHelper和room)
     */
    private  void alterCoulmns(T db,SpeSqliteTableSettingModel _old,SpeSqliteTableSettingModel _new){
        for(int i=0;i<_new.columns.size();i++){
            if(i>=_old.columns.size()){
                SpeSqliteColumnSettingModel column = _new.columns.get(i);
                String sql = " alter table "+_old.tableName+" add column ";
                sql+=column.key;
                sql+=" ";
                sql+= column.keyType;
                executeSQL(db,sql);
            }
        }
    }

    /**
     * 新增表
     * @param db db
     * @param table 表配置
     * @param  范型(需考虑SQLiteOpenHelper和room)
     */
    private  void createTableSQL(T db,SpeSqliteTableSettingModel table){
        String sql = " create table if not exists "+table.tableName+" (";
        for(int j=0;j 
 

运行效果

android轻量级无侵入式管理数据库自动升级组件_第2张图片

项目仓库:gitee.com/hfqf1234/Sp…

以上就是android轻量级无侵入式管理数据库自动升级组件的详细内容,更多关于android数据库管理组件的资料请关注脚本之家其它相关文章!

你可能感兴趣的:(android轻量级无侵入式管理数据库自动升级组件)