Android Sqlite Upgrade

来源:互联网 发布:淘宝我的积分查询 编辑:程序博客网 时间:2024/05/22 05:15

数据库升级,表中新增字段,同时需要保持原表中的数据。

参考官方文档

http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html


根据 version 可以向上升级数据库,也可以向下升级,onUpGrage(),onDownGrage() ,这个version是在SQLiteOpenHelper Constructors 时的version


参考这篇博客:

http://www.cnblogs.com/wang340/archive/2013/05/06/3063135.html

注意一点,直接在表中增加一个字段是不行的。

升级步奏:

1.重命名A表为temp_A

2.创建新表A

3.temp_A中的数据拷贝到A中(注意新字段)

4.删除temp_A表,

5.为新字段赋值

1-4 在一个事务中操作,5在一个事务中操作,


  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.beginTransaction();
    try {
    // 1
    db.execSQL("ALTER TABLE A RENAME TO temp_A");
    // 2
        db.execSQL("CREATE TABLE \"A\" (\"uid\" VARCHAR PRIMARY KEY  NOT NULL )");
        // 3
        db.execSQL("INSERT INTO A SELECT uid FROM temp_A");
        // 4
        db.execSQL("DELETE FROM temp_A");
        db.execSQL("DROP TABLE IF EXISTS temp_A");
        db.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
}
    db.endTransaction();
   
db.beginTransaction();
try {
// 5 这里做新字段赋值操作,数据大的话还是用事务操作
db.execSQL("UPDATE  A SET uid = "newuid", null);
db.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();

db.endTransaction();
 }

第一个事务是必须的,保证原始数据不丢失和新表的成功创建。



0 0
原创粉丝点击