Android问题—sqlLite数据库升级的一些集锦

1)什么是数据库版本升级?怎么升级法?

答:假如我们开发了一款APP,里面用到了数据库,我们假定这个数据库版本为v1.0, 在这个版本,我们创建了一个x.db的数据库文件,我们通过onCreate()方法创建了第一个table, t_user,里面有两个字段:_id,user_id;后面我们想增加一个字段user_name,这个时候 我们就需要对数据库表的结构进行修改了,而我们可以把更新数据库的操作梵高onUpgrade() 方法中,我们只需要在实例化自定义SQLiteOpenHelper的时候,修改版本号,比如把1改成2 这样,就会自动调用onUpgrade()的方法了!另外,对于每个数据库版本我们都应该做好 相应的记录(文档),类似于下面这种:

数据库版本 andoid对应版本 内容
v1.0 1 第一个版本,包含两个字段...
v1.1 2 数据保留,新增user_name字段

2)一些疑问以及相关解决方案

①应用升级,数据库文件是否会删除?

答:不会!数据什么的都在!

②如果我想删除表中某个字段或者增加一个新的字段,原先的数据还在吗?

答:在的!

③你刚说的那种粗暴的更新数据库版本的方式,不保留数据的,可以贴下吗?

答:可以,这里用的是第三方的ormlite,你也可以自己写数据库创建以及删除的代码: 

④比如是这种,假如我们已经升级到第三个版本了,我们在第二个版本增加了一个表, 然后第三个版本也增加了一个表,加入用户直接从第一个版本升级到第三个版本,这样 没经过第二个版本,就没有增加的那个表,这可怎么破?

答:很简单,我们可以在onUpgrade()里写一个switch(),结构如下:

public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource,
            int arg2, int arg3) {
    switch(arg2){
        case 1:
            db.execSQL(第一个版本的建表语句);
        case 2:
            db.execSQL(第二个版本的建表语句);
        case 3:
            db.execSQL(第三个版本的建表语句); 
    }
}
    
细心的你可能发现这里并没有写break,这就对了,这是为了保证跨版本升级时,每次数据库 修改都能全部执行到!这样可以保证表结构都是最新的!另外不一定是建表语句,修改表结构 也可以哦!

⑤旧表的设计太糟糕,很多字段要改,改动太多,想建一个新表,但是表名要一样 而且以前的一些数据要保存到新表中!

答:呵呵,给你跪了,当然,也有解决办法,下面说下思路:

1.将旧表改名成临时表: ALTER TABLE User RENAME TO _temp_User;

2.创建新表: CREATE TABLE User (u_id INTEGER PRIMARY KEY,u_name VARCHAR(20),u_age VARCHAR(4));

3.导入数据; INSERT INTO User SELECT u_id,u_name,"18" FROM _temp_User; //原表中没有的要自己设个默认值

4.删除临时表; DROP TABLE_temp_User;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值