Android sqlite版本更新大致方案
2015-12-17 14:47
357 查看
设想这样的情景:一个app的1.0版本聊天记录存在数据库里,比如字段有三个:user Id,userName,content
现在我在2.0版本中要优化这个模式,添加上一个消息时间的字段:time,这时就涉及到数据库版本更新的问题。
1、为什么要更新数据库:安装1.0版本的用户的聊天记录缓存在本地,它的字段有三个,如果用户更新了应用,2.0版本的程序在读取第四个字段time时由于缓存的表里没有time就会报空指针
2、基于1的问题,那要不把缓存的数据库删掉吧,重新命名一个数据库,这样更不可以,难道你微信每次更新聊天记录就没有了吗?
基于上面的问题的解决方案:利用SQLiteOpenHelper的onUpgrade方法
注释写的很清楚不在多说
现在我在2.0版本中要优化这个模式,添加上一个消息时间的字段:time,这时就涉及到数据库版本更新的问题。
1、为什么要更新数据库:安装1.0版本的用户的聊天记录缓存在本地,它的字段有三个,如果用户更新了应用,2.0版本的程序在读取第四个字段time时由于缓存的表里没有time就会报空指针
2、基于1的问题,那要不把缓存的数据库删掉吧,重新命名一个数据库,这样更不可以,难道你微信每次更新聊天记录就没有了吗?
基于上面的问题的解决方案:利用SQLiteOpenHelper的onUpgrade方法
public class DBservice extends SQLiteOpenHelper{ private String CREATE_CHATTABLE = "create table chattable(userId integer primarykey,userName text,content text);"; //备份1.0版本数据库,命名为temp private String CREATE_TEMP_CHATTABLE = "alter table chattable rename to _temp_chattable"; //把temp表中的用户缓存的数据导入新创建的数据库表中 ----''是为新加入字段插入默认值必须加上的,否则报错<pre name="code" class="java"><span style="font-size:10px;"> </span>private String INSERT_DATA = "insert into chattable select *,'' from _temp_chattable"; //temp表的数据已经转移,那么就删除temp表 private String DROP_CHATTABLE = "drop table _temp_chattable"; public DBservice(Context context, String name, CursorFactory factory,int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_CHATTABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { switch (newVersion) { case 2: db.execSQL(CREATE_TEMP_CHATTABLE); //此处不会报table chattable already exists 因为一旦检测到数据库版本升级,会对客户端缓存的数据库重命名为temp,所以再次创建的时候是不会报错的 db.execSQL(CREATE_CHATTABLE); db.execSQL(INSERT_DATA); db.execSQL(DROP_CHATTABLE); break; } }
注释写的很清楚不在多说
相关文章推荐
- Android存储之SQLite数据库
- Android存储之SQLite数据库
- Android 尺寸单位转换和屏幕适配相关
- android常用应用的包名和startAcitivity名
- AndroidManifest.xml文件解析
- android 仿淘宝京东购物车 ListView嵌套CheckBox
- 浅谈android自定义view
- Android设备的USB通讯
- android开发仿iphone开关按钮动态效果
- Android中的AndroidAnnotations
- Android优化指南
- Android Intent的花样启动
- android 布局2层叠加 能隔着上层点到下层的处理方法
- Android ImageView ScaleTypes介绍
- [干货]Android编程开发规范
- Android内存优化杂谈
- Android分区解释
- [干货]Android编程开发规范
- android开发的记录
- 【Android】Socket通讯示例(服务端/客户端)