android room数据库迁移写法

object DatabaseMigrations {
    val MIGRATION_1_2 = object : Migration(1, 2) {
        override fun migrate(db: SupportSQLiteDatabase) {
            db.execSQL("ALTER TABLE users ADD COLUMN email TEXT")
        }
    }

    val MIGRATION_2_3 = object : Migration(2, 3) {
        override fun migrate(db: SupportSQLiteDatabase) {
            db.execSQL("""
                CREATE TABLE users_new (
                    id INTEGER PRIMARY KEY NOT NULL,
                    username TEXT NOT NULL,
                    email TEXT,
                    register_time TEXT
                )
            """.trimIndent())

            db.execSQL("""
                INSERT INTO users_new (id, username, email)
                SELECT id, name, email FROM users
            """.trimIndent())

            db.execSQL("DROP TABLE users")
            db.execSQL("ALTER TABLE users_new RENAME TO users")
        }
    }

    fun getAll() = arrayOf(MIGRATION_1_2, MIGRATION_2_3)
}

import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase

object MigrationHelper {
    val migrations = listOf(
        object : Migration(1, 2) {
            override fun migrate(database: SupportSQLiteDatabase) {
                database.execSQL("ALTER TABLE users ADD COLUMN email TEXT NOT NULL DEFAULT ''")
            }
        }, object : Migration(2, 3) {
            override fun migrate(db: SupportSQLiteDatabase) {
                db.execSQL("ALTER TABLE users ADD COLUMN email_test TEXT NOT NULL DEFAULT ''")
            }
        },
         object : Migration(3, 4) {
        override fun migrate(db: SupportSQLiteDatabase) {
            db.execSQL("""
                CREATE TABLE users_new (
                    id INTEGER PRIMARY KEY NOT NULL,
                    username TEXT NOT NULL,
                    email TEXT,
                    register_time TEXT
                )
            """.trimIndent())

            db.execSQL("""
                INSERT INTO users_new (id, username, email)
                SELECT id, name, email FROM users
            """.trimIndent())

            db.execSQL("DROP TABLE users")
            db.execSQL("ALTER TABLE users_new RENAME TO users")
        }
    }


    )
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值