当前位置:   article > 正文

android SQLite更新数据库版本最佳写法_androidstudio sqlite 更新语句

androidstudio sqlite 更新语句

方法是从《第一行代码》中改写过来的

onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)方法在数据库版本变高之后会执行,

当我们数据库为第一版时,只有一个Book表,创建比较简单,只用在onCreate里新建一个Book即可

public class MySql extends SQLiteOpenHelper{
        private static final String CREATE_BOOK = 
        "create table Book("+"id integer primary key)";

    public MySql(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContext = context;
    }

     @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_BOOK);
        }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

但是之后我们需要新添一个Category表则我们需要修改我们的代码,现在Mysql变成这样

public class MySql extends SQLiteOpenHelper{
    private static final String CREATE_BOOK = 
        "create table Book("+"id integer primary key)";
    private static final String CREATE_CATEGORY=
        "create table Category("+"id integer primary key")";

    public MySql(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContext = context;
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_BOOK);
        db.execSQL(CREATE_CATEGORY);
    }
}

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        switch(oldVersion){
        case 1:
            db.execSQL(CREATE_CATEGORY);
        default;
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

我们再onUpgrade()中添加了一个switch判断,如果当前的版本为1的话,就只会创建Category表。如果用户安装新的程序第二版的程序,则会直接创建两个表Book Category,如果用户用第二版覆盖第一版的程序,旧版本数据库版本号为1,则只会创建Category表,因为Book还存在,所以达到了升级数据库的目的。

但是过了没多久,我们需要在Book表中增加一个name字段,再次修改代码

public class MySql extends SQLiteOpenHelper{
    private static final String CREATE_BOOK = 
        "create table Book("+"id integer primary key,
        "+"name text)";
    private static final String CREATE_CATEGORY=
        "create table Category("+"id integer primary key")";

    public MySql(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContext = context;
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_BOOK);
        db.execSQL(CREATE_CATEGORY);
    }
}

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        switch(oldVersion){
        case 1:
            db.execSQL(CREATE_CATEGORY);
        case 2:
            db.execSQL("alter table Book add column name text");
        default;
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

首先我们再Book建表语句中加入了name列,这样当用户直接安装第三版的程序,新增的字段就在Book表内了。如果用户是覆盖安装的话,注意我们的case后面没有跟break,假设现在第一版的用户安装,则会执行更新数据库的操作,判断oldVersion为1则依次执行db.execSQL(CREATE_CATEGORY); db.execSQL("alter table Book add column name text"); 这两段代码更新数据库。
如果现在为第二版的用户安装,则从case2来更新数据库,所以只会执行db.execSQL("alter table Book add column name text");这段代码来更新数据库,从而达到了不同版本正确更新数据库的目的。

终于写完了,抽了个烟头晕死了这里写图片描述 滚去睡觉了
~。~
`

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/646470
推荐阅读
相关标签
  

闽ICP备14008679号