xutils3 数据库版本更新问题

来源:互联网 发布:五秒js倒计时代码 编辑:程序博客网 时间:2024/05/22 15:47

Android使用SQLite数据库保存数据,那数据库版本升级是怎么回事呢,这里说一下。

一、软件v1.0

安装v1.0,假设v1.0版本只有一个account表,这时走继承SQLiteOpenHelper的onCreate,不走onUpgrade。

1、v1.0(直接安装v1.0)

二、软件v2.0

有2种安装软件情况:

1、v1.0 –> v2.0 不走onCreate,走onUpgrade

2、v2.0(直接安装v2.0) 走onCreate,不走onUpgrade

v1.0版本只有一个account表,软件版本升级到v2.0了,但是v2.0数据库需要新增一个member表,那怎么办呢?这里有2种情况了:一种是安装了v1.0升级到v2.0,这时不会走继承SQLiteOpenHelper的onCreate,而是直接走onUpgrade,这时就要在onUpgrade添加member表的代码了,在onCreate加了也没用,因为这种情况都不走onCreate。。另一种情况就是用户从来没有安装过这个软件,直接安装v2.0,这时走继承SQLiteOpenHelper的onCreate,不走onUpgrade,所以要在onCreate添加member表的代码。这怎么办呢?这就要合理升级数据库版本了。

三、软件v3.0

假设v3.0又新增一个news表,这里有三种情况:

1、v1.0 –> v3.0 不走onCreate,走onUpgrade

2、v2.0 –> v3.0 不走onCreate,走onUpgrade

3、v3.0(直接安装v3.0) 走onCreate,不走onUpgrade

主要就是在oncreate和onupgrad里都调用dbVersionControll()

public class MyApplication extends Application {    private final String TAG = "MyApplication";    private DbManager db;    private static MyApplication application;    private final int FIRST_DB_VERSION = 1;    private final int CURRENT_DB_VERSION = 2;    private void dbVersionControll(int oldVersion,int newVersion){        // 使用for实现跨版本升级数据库        for (int i = oldVersion; i < newVersion; i++) {            switch (i) {                case 1:{                    upgradeToVersion2(db);                }                    break;                default:                    break;            }        }    }    private void upgradeToVersion2(DbManager db){         //这里做数据库操作,比如添加表,删除表,添加字段,删除字段等。        }    DbManager.DaoConfig daoConfig = new DbManager.DaoConfig()            .setDbName("batatest1.db")            // 不设置dbDir时, 默认存储在app的私有目 录.            .setDbDir(new File(SDCardUtils.getInnerSDCardPath() + File.separator + "ssss"))            .setDbVersion(CURRENT_DB_VERSION)            .setDbOpenListener(new DbManager.DbOpenListener() {                @Override                public void onDbOpened(DbManager db) {                    // 开启WAL, 对写入加速提升巨大                    db.getDatabase().enableWriteAheadLogging();                }            })            .setDbUpgradeListener(new DbManager.DbUpgradeListener() {                @Override                public void onUpgrade(DbManager db, int oldVersion, int newVersion) {                    // TODO: 数据库的更新操作                    dbVersionControll(oldVersion,newVersion);                }            });    @Override    public void onCreate() {        super.onCreate();        x.Ext.init(this);        x.Ext.setDebug(BuildConfig.DEBUG); // 开启debug会影响性能        if (null == application) {            application = this;        }        db = x.getDb(daoConfig);        //创建表        SqlUtils.createTables(db);        dbVersionControll(FIRST_DB_VERSION,CURRENT_DB_VERSION);    }    public static MyApplication getInstance() {        return application;    }    public DbManager getDbManager() {        return db;    }}
1 0
原创粉丝点击