Android 公升級資料庫的最佳寫法

2021-07-04 15:45:59 字數 2054 閱讀 5828

方法: 每乙個資料庫版本都會對應乙個版本號,當指定的資料庫版本號大於當前資料庫版本號的時候,就會進入到onupgrade()方法中去執行更新操作。這裡需要為每乙個版本號賦予它各自改變的內容,然後在onupgrade()方法中對當前資料庫的版本號進行判斷,再執行相應的改變就可以了。

接著就讓我們來模擬乙個資料庫公升級的案例,還是由mydatabasehelper類來對資料庫進行管理。第一版的程式要求非常簡單,只需要建立一張book表,mydatabasehelper中的**如下所示:

「id integer primary key autoincrement, 」 + 「author text, 」 + 「price real, 」 + 「pages integer, 」 + 「name text)」;

public mydatabasehelper(context context, string name, curso***ctory factory, int version)

@override

public void oncreate(sqlitedatabase db)

@override

public void onupgrade(sqlitedatabase db, int oldversion, int newversion)

} 不過,幾星期之後又有了新需求,這次需要向資料庫中再新增一張category表。於是,修改mydatabasehelper中的**,如下所示:

public class mydatabasehelper extends sqliteopenhelper

@override

public void oncreate(sqlitedatabase db)

@override

public void onupgrade(sqlitedatabase db, int oldversion, int newversion)

} }

可以看到,在oncreate()方法裡我們新增了一條建表語句,然後又在onupgrade()方法中新增了乙個switch判斷,如果使用者當前資料庫的版本號是1,就只會建立一張category表。這樣當使用者是直接安裝的第二版的程式時,就會將兩張表一起建立。而當使用者是使用第二版的程式覆蓋安裝第一版的程式時,就會進入到公升級資料庫的操作中,此時由於book表已經存在了,因此只需要建立一張category表即可。

但是沒過多久,新的需求又來了,這次要給book表和category表之間建立關聯,需要在book表中新增乙個category_id的字段。再次修改mydatabasehelper中的**,如下所示:

public class mydatabasehelper extends sqliteopenhelper

@override

public void oncreate(sqlitedatabase db)

@override

case 1:

db.execsql(create_category);

case 2:

db.execsql(「alter table book add column category_id integer」);

default: }

} }

可以看到,首先我們在book表的建表語句中新增了乙個category_id列,這樣當使用者直接安裝第三版的程式時,這個新增的列就已經自動新增成功了。然而,如果使用者之前已經安裝了某一版本的程式,現在需要覆蓋安裝,就會進入到公升級資料庫的操作中。在onupgrade()方法裡,我們新增了乙個新的case,如果當前資料庫的版本號是2,就會執行alter命令來為book表新增乙個category_id列。

這裡請注意乙個非常重要的細節,switch中每乙個case的最後都是沒有使用break的,為什麼要這麼做呢?這是為了保證在跨版本公升級的時候,每一次的資料庫修改都能被全部執行到。比如使用者當前是從第二版程式公升級到第三版程式的,那麼case 2中的邏輯就會執行。而如果使用者是直接從第一版程式公升級到第三版程式的,那麼case 1和case 2中的邏輯都會執行。使用這種方式來維護資料庫的公升級,不管版本怎樣更新,都可以保證資料庫的表結構是最新的,而且表中的資料也完全不會丟失了。

公升級資料庫的最佳寫法

package com.example.databasetest import android.content.context import android.database.sqlite.sqlitedatabase import android.database.sqlite.sqliteope...

公升級資料庫

第一版只有book表 第二版加上category表 第三版為book表加上category id 列 book表 這是公升級後的原來沒有category id 列 public static final string create book create table book id integer ...

阿里雲 mysql公升級 mysql公升級資料庫

mysql公升級資料庫 雲伺服器 elastic compute service,簡稱ecs 是阿里雲提供的效能卓越 穩定可靠 彈性擴充套件的iaas infrastructure as a service 級別雲計算服務。雲伺服器ecs免去了您採購it硬體的前期準備,讓您像使用水 電 天然氣等公共...