从开始一直不知道这个东西是干什么的,数据库的版本号也是随便定义的,还有两个版本号。
Android在设计时,就考虑到了数据库的更新。当检测到版本有变化时,就会对数据库更新,执行这个操作。

所以定义数据库的版本还是比较重要的,如第一个程序版本时定义的数据库版本为1,在程序发布新版时有对数据库更新操作,可能增加表,增加列,如果没有调整这个版本,数据库不会创建新的表,也不会添加新的列,安装新版的程序就会崩溃了。

查了一些资料终于明白了。
ContactsDatabaseHelper这个是系统 联系人的源码中的一个类,里面已经定义了版本为353,
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}在这个方法里处理了更新

大概代码是这样的
Java代码
‪1.‬if (oldVersion < 99) {直接删除所有的表,重建,有可能是变化太大的问题吧。}
‪2.‬
‪3.‬if (oldVersion == 100) {
‪4.‬CREATE INDEX创建一个新的索引
‪5.‬oldVersion++;增加旧版本号,
‪6.‬}
‪7.‬。。。之后多个操作,依次增加版本号。
‪8.‬
‪9.‬if (oldVersion == 105) {
‪10.‬ upgradeToVersion202(db);//直接增加到202
‪11.‬ oldVersion = 202;
‪12.‬ }
‪13.‬
‪14.‬对于数据库的版本号还要严格地处理。
‪15.‬这里 对oldVersion操作完成后需要与newVersion一样,才算升级成功。
‪16.‬if (oldVersion != newVersion) {
‪17.‬throw new IllegalStateException(
‪18.‬ "error upgrading the database to version " + newVersion);
‪19.‬} //当然这不是强制要求的,
‪20.‬upgrade就结束了。
‪21.‬这样数据库版本号就是newVersion,如果下一次要升级,就至少要比这个高才会触发。

也许有人会问,如果当前的表的存了数据,程序又不愿重新安装,更新数据库时要保留原来的数据怎么办呢?
以上的版本升级是必然要做的事,但是没有提到数据更新的问题。
如果不是删除原来的表格,只是增加了一列,可能会要求对这列赋默认的值

Java代码
‪1.‬上面有一个跨度较大的就是100多到202的升级:
‪2.‬upgradeToVersion202(SQLiteDatabase db)看这个方法:
‪3.‬db.execSQL(
‪4.‬ "ALTER TABLE " + Tables.PHONE_LOOKUP +
‪5.‬ " ADD " + PhoneLookupColumns.MIN_MATCH + " TEXT;");
‪6.‬增加了一列。
‪7.‬
‪8.‬SQLiteStatement update = db.compileStatement(
‪9.‬ "UPDATE " + Tables.PHONE_LOOKUP +
‪10.‬ " SET " + PhoneLookupColumns.MIN_MATCH + "=?" +
‪11.‬ " WHERE " + PhoneLookupColumns.DATA_ID + "=?");
‪12.‬创建更新语句。
‪13.‬
‪14.‬Cursor c = db.query(Tables.PHONE_LOOKUP + " JOIN " + Tables.DATA +
‪15.‬ " ON (" + PhoneLookupColumns.DATA_ID + "=" + DataColumns.CONCRETE_ID + ")",
‪16.‬ new String[]{Data._ID, Phone.NUMBER}, null, null, null, null, null);
‪17.‬处理新的列。
‪18.‬
‪19.‬更新数据。
‪20.‬try {
‪21.‬ while (c.moveToNext()) {
‪22.‬ long dataId = c.getLong(0);
‪23.‬ String number = c.getString(1);
‪24.‬ if (!TextUtils.isEmpty(number)) {
‪25.‬ update.bindString(1, PhoneNumberUtils.toCallerIDMinMatch(number));
‪26.‬ update.bindLong(2, dataId);
‪27.‬ update.execute();
‪28.‬ }
‪29.‬ }
‪30.‬ } finally {
‪31.‬ c.close();
‪32.‬ }
‪33.‬这就是处理数据更新的过程。

博客文章列表居然发现三个,删除一个就全没了。这次格式乱了

更多相关文章

  1. Android开发——利用Cursor+CursorAdapter实现界面实时更新
  2. Android(安卓)11正式发布:小米、OPPO等手机将陆续更新
  3. Android之数据持久化(sqllite数据库)四
  4. 如何将Android数据库操作通用化(一)
  5. android导入外部数据库到项目中的使用方法
  6. Android(安卓)O 8.0 通知(Notification)更新后的简单兼容写法
  7. Android(安卓)app实现自更新和安装,权限检测适配Android6.0以下和
  8. android开发实战之做手机号和邮编查询小程序
  9. Android(安卓)adt v22.6.2-1085508 自己主动创建 appcompat_v7

随机推荐

  1. 关于如何检测Android的内存泄漏:
  2. Android之ListView属性描述
  3. android 使用mediaplayer播放网络音乐
  4. Android(安卓)多个APK共享数据(Shared Us
  5. listview为空时,显示字符串
  6. Android程式编写及调试新手入门-1
  7. Android中的Notification的使用
  8. android按键移植
  9. Android架构组件(三)——ViewModel
  10. React Native 清空Android图片缓存