一日一钱,千日一千。绳锯木断,水滴石穿。

Sqlite升级时向已有表中增加字段

Posted on By TinyVampirePudge

Sqlite升级时向已有表中增加字段

Sqlite数据库升级时,我们经常会遇到给已有表中增加字段的操作。一般来说,给已有表中增加字段是数据库操作中的基操,没必要再专门写篇blog记录的,但是sqlite对SQL语句支持的不够彻底,比方说这次我们用到的”ALTER TABLE”命令。官方介绍的第一句如下所示:

SQLite supports a limited subset of ALTER TABLE. The ALTER TABLE command in SQLite allows the user to rename a table or to add a new column to an existing table.

Sqlite支持“ALTER TABLE”的有限子集,在Sqlite中这个命令允许用户重命名表、向已有表中添加新列。

那么如果我们想在一行SQL语句中同时添加多个字段,这个是不能直接实现的,具体原因看末尾的参考链接2. sqlite alter table add MULTIPLE columns in a single statemen there

既然不能一次添加多个,那么我们一次添加一个总行吧,这里给出一个实现方式,针对添加多个column的需求,这里对应的创建多条sql语句,在升级时依次执行:

// sqlite 不支持一次增加多列,只能一次增加一列。
    val sqlsV2 = arrayOf("alter table ${TABLE_NAME} add column age VARCHAR(255)",
            "alter table ${TABLE_NAME} add column gender VARCHAR(255)")

依次执行数组中的sql语句:

override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        Log.e(TAG, "onUpgrade oldVersion:$oldVersion newVersion:$newVersion")
        // 1 升级到 2
        if (oldVersion < 2) {
            Log.e(TAG, "onUpgrade 1~2")
            sqlsV2.forEach {
                db?.execSQL(it)
            }
        }
    }

参考:

1. 菜鸟教程

2. sqlite alter table add MULTIPLE columns in a single statemen there

3. sqlite官网——Alter Table