三分钟搞定Android数据库升级

本文介绍了如何在Android中进行数据库升级,通过三分钟实例展示了从旧表重命名、创建新表、复制数据到新表,再到删除旧表的过程。强调了数据库版本的重要性,当版本号增加时,系统会自动执行升级操作。此外,提供了在线查看数据库变化的工具和方法,帮助开发者跟踪数据库升级效果。在升级过程中,确保数据不丢失,同时能根据需求调整表结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三分钟搞定Android数据库升级

比如旧表名称叫:account,重命名表名称叫:account_temp

步骤如下:

1:rename旧表名称把account改成account_temp

2:创建新表,表名称和原表名称一致也叫account或者其他名字account_v1

3:复制旧表account_temp(改名字后的表)数据到新表account_v1 中

4:Drop掉旧表


更新数据库前提是数据库版本要大于当前版本,在初始化Application的onCreate中执行:

myDatabaseHelper = new MyDatabaseHelper(DownLoadActivity.this,"user.db",null,2);

参数1是上下文context,

参数2是数据库名称,

参数3是一个用于返回Cursor的工厂,该参数为NULL, 表示使用默认的工厂

参数4是数据库版本,


如果大于当前数据库版本号,会自动执行

SQLiteOpenHelper子类中的onUpgrade方法,我们可以把以上4步直接写在这个方法中:

备注:account 是原表名称 ,account_temp是重命名后表名称

//1:重命名表名称
String renameTable = "alter table account rename to account_temp";
//2:创建新表
String newTable = "create table account_v1 ("
        +"id integer primary key autoincrement,"
        +"name text,"
        +"account text,age integer)";
//3:复制旧表数据到新表
String copyTable = "insert into account_v1(id, name,account) select id,name,account from account_temp";
//4:删除旧表
String dropTable = "drop table account_temp";
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        if(newVersion > oldVersion){
            //升级数据库前备份数据
            db.execSQL(renameTable);
            db.execSQL(newTable);
            db.execSQL(copyTable);
            db.execSQL(dropTable);
        }
}

数据库版本开始是1,查看数据库数据:

 

查看工具是在线查看,直接在app.build中配置,同步下:

dependencies {
    debugCompile 'com.amitshekhar.android:debug-db:1.0.0'
}

访问地址看logcat:

这个里面很方便看到数据库数据变化结果

刚才是初始化的时候数据库数据,我们看到里面只有account表,里面一条数据,这个时候我们比如说下个版本要升级数据库,修改account里面的字段,新增age字段,我们需要怎么做呢?


myDatabaseHelper = new MyDatabaseHelper(DownLoadActivity.this,"user.db",null,2);

我们把最后一个参数改成2,这个时候运行后APP会自动执行onupgrade方法,并执行里面的4个步骤,

执行完后截图如下:

我们发现原来的account不见了,并且生产了个account_v1,但是里面数据都在还多了一个age字段,这就保证我们升级数据库的时候,数据不会丢失,并且还可以根据业务需求修改字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值