Android数据库更新并保留原来数据的实现

Android应用程序更新的时候如果数据库修改了字段需要更新数据库,并且保留原来的数据库数据:

这是原有的数据库表

CREATE_BOOK = "create table book(bookId integer primarykey,bookName text);";

然后我们增加一个字段:

CREATE_BOOK = "create table book(bookId integer primarykey,bookName text,bookContent text);";

首先我们需要把原来的数据库表重命名一下

CREATE_TEMP_BOOK = "alter table book rename to _temp_book";

然后把备份表中的数据copy到新创建的数据库表中

INSERT_DATA = "insert into book select *,‘ ‘ from _temp_book";(注意‘ ‘是为新加的字段插入默认值的必须加上,否则就会出错)。

然后我们把备份表干掉就行啦。

DROP_BOOK = "drop table _temp_book";

然后把数据库的版本后修改一下,再次创建数据库操作对象的时候就会自动更新(注:更新的时候第一个创建的操作数据的对象必须是可写的,也就是通过这个方法getWritableDatabase()获取的数据库操作对象)

然后在onUpgrade()方法中执行上述sql语句就OK了

public class DBservice extends SQLiteOpenHelper{
    private String CREATE_BOOK = "create table book(bookId integer primarykey,bookName text);";
    private String CREATE_TEMP_BOOK = "alter table book rename to _temp_book";
    private String INSERT_DATA = "insert into book select *,‘‘ from _temp_book";
    private String DROP_BOOK = "drop table _temp_book";
 public DBservice(Context context, String name, CursorFactory factory,int version) {
  super(context, name, factory, version);
 }

@Override
 public void onCreate(SQLiteDatabase db) {
  db.execSQL(CREATE_BOOK);
 }

@Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  switch (newVersion) {
  case 2:
   db.execSQL(CREATE_TEMP_BOOK);
   db.execSQL(CREATE_BOOK);
   db.execSQL(INSERT_DATA);
   db.execSQL(DROP_BOOK);
   break;
  }
 }

Android数据库更新并保留原来数据的实现

时间: 2024-08-29 16:29:24

Android数据库更新并保留原来数据的实现的相关文章

Android数据库更新——上万条数据的插入

在实际情况下,很可能遇到会向一个表中插入10万条数据,而这样的数据库更新,如果用寻常的方式,在SQLiteOpenHelper.onUpdate()方法中不断的执行SQL语句,那么效率是可想而知的,甚至可能造成整个应用的崩溃! 解决方案: 遇到这种情况,其解决方案应为,用做好的db文件替换之前的数据库文件.当然,有人可能有疑问,这样的话,怎么写入到data/data目录下.这个的确是个问题,可是,我们可以将该数据库存放在SD卡目录下.当然,数据库存放在SD卡目录中,的确是对安全性的妥协. 实现步

MySQL 学习笔记(二):数据库更新、视图和数据控制

基础准备: 在 school 数据库下建立student.course.sc 三个表: create table student( Sno char(9) primary key, Sname char(20) unique, Ssex char(2), Sage int, Sdept char(20)); create table Course( Cno char(4) primary key, Cname char(40), Cpno char(4), Ccredit int); creat

Android数据库表的创建和数据升级操作

之前的文章有提到,可以在xml文件中配置数据库信息:http://www.cnblogs.com/wenjiang/p/4492303.html,现在就讲如何利用这些信息类构建数据库. xml文件大概如下: <?xml version="1.0" encoding="utf-8"?> <database> <!-- 数据库名称 --> <dbname value="zwb.db"></dbna

你应该知道的 Android 数据库更新策略

GreenDao 自带更新的问题 自定义更新 1 自定义更新类 2 关联自定义的 MyOpenHelper 更新数据库 1 新增表 2 更新已有表的字段 21 开源方案 22 发现问题 23 改造以解决问题 跨版本升级 转载请注明出处:(http://blog.csdn.net/my_truelove/article/details/70196028) 访问 ruicb.com,一键抵达我的博客! 在涉及数据库的应用中,我们不可能在应用刚上线时,就提前预知未来需要的字段,只能在后期根据新的需求去

Android版本升级同时Sqlite数据库的升级及之前数据的保留

http://www.cnblogs.com/wang340/archive/2013/05/06/3063135.html http://www.eoeandroid.com/forum.php?mod=viewthread&tid=166052 做Android应用,不可避免的会与SQLite打交道.随着应用的不断升级,原有的数据库结构可能已经不再适应新的功能,这时候,就需要对SQLite数据库的结构进行升级了. SQLite提供了ALTER TABLE命令,允许用户重命名或添加新的字段到已

【转】Android版本升级同时Sqlite数据库的升级及之前数据的保留

做Android应用,不可避免的会与SQLite打交道.随着应用的不断升级,原有的数据库结构可能已经不再适应新的功能,这时候,就需要对SQLite数据库的结构进行升级了. SQLite提供了ALTER TABLE命令,允许用户重命名或添加新的字段到已有表中,但是不能从表中删除字段.并且只能在表的末尾添加字段,比如,为 Subscription添加两个字段:1 ALTER TABLE Subscription ADD COLUMN Activation BLOB;2 ALTER TABLE Sub

greenDao android开源框架数据库更新表的问题

最近使用greenDao当android应用升级数据库新增表或者修改表,发现数据被清空的问题 查找资料也没有找到解决方案,最后查看代码发现需要自己修改SQLiteOpenHelper 1.找到greenDao生成的DaoMaster.java文件,里面有SQLiteOpenHelper实现 2.修改DevOpenHelper类里的   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 方法 通过old

Android学习之基础知识九 — 数据存储(持久化技术)之使用LitePal操作数据库

上一节学习了使用SQLiteDatabase来操作SQLite数据库的方法,接下来我们开始接触第一个开源库:LitePal.LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)的模式,并将我们平时开发最常用到的一些数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表和增删改查的操作,LitePal的项目主页上也有详细的使用文档,地址是: https://github.com/LitePalFramework/LitePal 一.配置LitePal 要在

Android 7.0 以上保留数据去除锁屏密码的方法

在很多情况下,由于我们的疏忽,导致忘记了锁屏密码.也没有开启 USB 调试,内置存储中还有要保留的数据.我们需要在不清除数据的情况下删除锁屏密码.接下来我们就介绍该如何做. 注意事项 首先要注意,这个方法不能用于已经绑定了 data 加密的设备.例如 Motorola,设置了输入锁屏密码才能启动设备,这种方法就不再适用了.原因是这种类型的设备,使用了锁屏密码加密了 data 分区,导致无法修改 data 分区. 适用 Android Android 7.0+ 已测试机型 Moto Z Andro