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; }}
- xutils3 数据库版本更新问题
- 应用版本更新Xutils3
- Xutils3数据库db问题补充
- 应用程序更新,数据库升级版本问题
- 笔记30- 数据库更新和程序版本更新问题
- xUtils3之数据库笔记
- xUtils3数据库的使用
- Xutils3——数据库
- XUtils3之数据库笔记
- Xutils3的数据库模块
- android版本更新问题
- app版本更新问题
- cocoaPods版本更新问题
- Xutils3的cookie问题
- Android Sqlite 数据库版本更新
- Android SQLite数据库版本更新
- Android Sqlite 数据库版本更新
- Android Sqlite 数据库版本更新
- schema设计
- 网络安全之netstat
- 什么是 web 框架?
- org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'plansAndActi
- servlet学习
- xutils3 数据库版本更新问题
- 简述 I18N、L10N的区别
- 英伟达jetson tx1开发套件配置tensorflow
- 盘古:阿里云飞天分布式存储系统设计深度解析
- SymPy学习之Numerical evaluation
- eclipse配置参数
- 新知识-Bazel
- 社区发现(Community Detection)算法
- Java内存--直接内存(Direct Memory)---NIO