Android Sqlite数据库升级——kotlin

Android Sqlite数据库升级——kotlin

对于android开发同窗来讲,数据库相关操做是咱们平常操做之一,相应的数据库的升级操做就必不可少了。这里我总结下数据库升级时须要注意的事项。javascript

Android中数据库操做的核心类是SqliteOpenHelper,这个类有两个方法,onCreate和onUpgrade。onCreate方法只会调用一次,onUpgrade方法会在版本号增长以后触发。java

数据库升级的操做过程当中,咱们须要处理的状况有两种,第一种是数据库从低版本升级上来的,第二种是新安装app的用户。android

每次数据库须要升级时,咱们须要将新版本的修改同步到两个地方: 一个是onCreate方法中,这里确保新安装app的用户可使用到最新的数据库,因此这里建立数据库的语句应该是能够直接建立最新版本数据库的语句。 另外一个是onUpgrade方法中,在这里咱们须要确保低版本用户在升级到最新版时,可以将数据库更新到最新,这里咱们就须要将各个版本间的差别用代码体现出来。sql

代码以下:数据库

// 表的名字
const val sqlite_name = "MySqliteHelper.db"

internal class MySqliteHelper(context: Context, version: Int) : SQLiteOpenHelper(context, sqlite_name, null, version) {
    val TAG = "MySqliteHelper"

    //  建立语句
    val sqlCreate = "create table Test (" +
            "id integer primary key autoincrement, " +
            "author text, " +
            "price real, " +
            "pages integer, " +
            "name text, " +
            "ver2 text, " +
            "ver3 text, " +
            "ver4 text, " +
            "ver5 text)"

    override fun onCreate(db: SQLiteDatabase?) {
        Log.e(TAG, "onCreate")
        db?.execSQL(sqlCreate)
    }

    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")
        }

        // 2 升级到 3
        if (oldVersion < 3) {
            Log.e(TAG, "onUpgrade 2~3")
        }

        // 3 升级到 4
        if (oldVersion < 4) {
            Log.e(TAG, "onUpgrade 3~4")
        }

        // 4 升级到 5
        if (oldVersion < 5) {
            Log.e(TAG, "onUpgrade 4~5")
        }
    }


}
复制代码

二、使用SqliteOpenHelper的子类建立数据库:app

class SqliteUpgradeActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sqlite_upgrade)

        var sqliteHelper = MySqliteHelper(this, 1);
        var db = sqliteHelper.writableDatabase

        db.execSQL("insert into Test (name, author, pages, price) values(?, ?, ?, ?)",
                arrayOf("tiny's book", "tiny", "600", "20.9"))
        db.execSQL("insert into Test (name, author, pages, price) values(?, ?, ?, ?)",
                arrayOf("tongtong", "tong", "250", "9.99"))


    }
}
复制代码

三、这里咱们先设置数据库的版本为1,而后看下执行结果: log中有以下输出:代表咱们的数据库建立好了。ide

E/MySqliteHelper: onCreate
复制代码

而后咱们查看下建立好的数据库,以下所示,能够看到数据库中的数据字段确实如咱们指望的那样。this

onCreate方法执行以后的数据库

五、修改版本号,模拟从低版本升级到高版本: 这里咱们直接将version字段的值修改成5,表明着用户是从第1版数据库的app直接升级到第5版的数据库。这种状况下,onUpgrade方法中的全部代码都会顺序执行,咱们运行代码验证下:spa

E/MySqliteHelper: onUpgrade oldVersion:1 newVersion:5
    onUpgrade 1~2
    onUpgrade 2~3
    onUpgrade 3~4
    onUpgrade 4~5
复制代码

能够看到,输出的Log跟咱们指望的彻底相同。code

总结: 使用SqliteOpenHelper进行数据库升级操做时,onCreate方法中须要时刻保持最新的业务语句,由于这个方法只有新安装的用户才会执行。另外,在onUpgrade方法中,须要保留每次升级时新版本与上版本的差别。

相关文章
相关标签/搜索