SQLite數(shù)據(jù)庫--升級數(shù)據(jù)庫最佳操作

在程序發(fā)布以后掉缺,若我們再次開發(fā)升級了新的版本眶明,此時筐高,若數(shù)據(jù)庫也增加了表或者原有的表需要新增字段柑土,在不刪除原數(shù)據(jù)庫的情況下,進(jìn)行數(shù)據(jù)庫的升級

模擬數(shù)據(jù)庫升級案例

第一版程序,只創(chuàng)建一張Book表

MyDatabaseHelper中的代碼

public class MyDatabaseHelper extends SQLiteOpenHelper{
  //創(chuàng)建Book表的SQL語句
  public static final String CREATE_BOOK = "create table Book("
    + "id integer primary key autoincrement,"
    + "anthor text,"
    + "price real,"
    + "pages integer,"
    + "name text)";
  public MyDatabaseHelper(Context context, String name, CursorFactory factory, int version){
    super(context, name, factory, version);
  }
  @override
  public void onCreate(SQLiteDatabase db){
    //執(zhí)行SQL語句诫欠,創(chuàng)建Book表
    db.execSQL(CREATE_BOOK );
  }
  @override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
  }
}

這樣當(dāng)用戶安裝了第一版程序時荒叼,其存儲空間上自然就有了Book表

第二版程序典鸡,數(shù)據(jù)庫中新增一個Category表

修改MyDatabaseHelper 中的代碼

public class MyDatabaseHelper extends SQLiteOpenHelper{
  //創(chuàng)建Book表的SQL語句
  public static final String CREATE_BOOK = "create table Book("
    + "id integer primary key autoincrement,"
    + "anthor text,"
    + "price real,"
    + "pages integer,"
    + "name text)";

  //創(chuàng)建Category表的SQL語句
  public static final String CREATE_CATEGORY = "create table Category("
  + "id integer primary key autoincrement,"
  + "category_name text,"
   + "category_code integer";

  public MyDatabaseHelper(Context context, String name, CursorFactory factory, int version){
    super(context, name, factory, version);
  }
  @override
  public void onCreate(SQLiteDatabase db){
    //執(zhí)行SQL語句萝玷,創(chuàng)建Book表
    db.execSQL(CREATE_BOOK );
    //執(zhí)行SQL語句嫁乘,創(chuàng)建Category表
    db.execSQL(CREATE_CATEGORY );
  }
  @override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
    switch(oldVersion){
      case 1:
        db.execSQL(CREATE_CATEGORY);
      default;
    }
  }
}
  • onCreate()方法中新增了一條創(chuàng)建Category表的語句:當(dāng)用戶沒有使用個過這個程序時,直接安裝了第二版的程序球碉,首次使用的時候就會創(chuàng)建Book表和Category表
  • onUpgrade()方法中添加了一個switch判斷蜓斧,若用戶使用了第一版的程序,再安裝第二版的程序來覆蓋第一版的程序睁冬,就會調(diào)用onUpgrade()方法挎春,當(dāng)舊版本的數(shù)據(jù)庫版本是1,就會執(zhí)行創(chuàng)建Category表的SQL語句
第三版程序,Book表和Category表建立連接

修改MyDatabaseHelper 中的代碼

public class MyDatabaseHelper extends SQLiteOpenHelper{
  //創(chuàng)建Book表的SQL語句
  public static final String CREATE_BOOK = "create table Book("
    + "id integer primary key autoincrement,"
    + "anthor text,"
    + "price real,"
    + "pages integer,"
    + "name text)";

  //創(chuàng)建Category表的SQL語句直奋,較第二版程序比起來能庆,新增了一個字段
  public static final String CREATE_CATEGORY = "create table Category("
  + "id integer primary key autoincrement,"
  + "category_name text,"
   + "category_code integer"
   + "category_id integer";

  public MyDatabaseHelper(Context context, String name, CursorFactory factory, int version){
    super(context, name, factory, version);
  }
  @override
  public void onCreate(SQLiteDatabase db){
    //執(zhí)行SQL語句,創(chuàng)建Book表
    db.execSQL(CREATE_BOOK );
    //執(zhí)行SQL語句脚线,創(chuàng)建Category表
    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 category_id integer");
      default;
    }
  }
}
  • 創(chuàng)建Category表的SQL語句新增了一個字段,當(dāng)用戶沒有使用過本程序時殉挽,直接安裝的是第三個版本的程序就會執(zhí)行onCreate()方法丰涉,實(shí)現(xiàn)了創(chuàng)建兩個數(shù)據(jù)庫表的功能
  • 當(dāng)用戶由第一個版本或者第二個版本升級到第三個版本的時候,就會執(zhí)行onUpgrade()方法斯碌,注意沒有break

這樣升級數(shù)據(jù)庫就沒有數(shù)據(jù)的丟失了......

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末一死,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子傻唾,更是在濱河造成了極大的恐慌投慈,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冠骄,死亡現(xiàn)場離奇詭異伪煤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)凛辣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門抱既,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扁誓,你說我怎么就攤上這事防泵。” “怎么了蝗敢?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵捷泞,是天一觀的道長。 經(jīng)常有香客問我寿谴,道長锁右,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任讶泰,我火速辦了婚禮咏瑟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痪署。我一直安慰自己响蕴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布惠桃。 她就那樣靜靜地躺著浦夷,像睡著了一般辖试。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上劈狐,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天罐孝,我揣著相機(jī)與錄音,去河邊找鬼肥缔。 笑死莲兢,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的续膳。 我是一名探鬼主播改艇,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坟岔!你這毒婦竟也來了谒兄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤社付,失蹤者是張志新(化名)和其女友劉穎承疲,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸥咖,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡燕鸽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了啼辣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啊研。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鸥拧,靈堂內(nèi)的尸體忽然破棺而出党远,到底是詐尸還是另有隱情,我是刑警寧澤住涉,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布麸锉,位于F島的核電站钠绍,受9級特大地震影響舆声,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜柳爽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一媳握、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧磷脯,春花似錦蛾找、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柿赊。三九已至,卻和暖如春幻枉,著一層夾襖步出監(jiān)牢的瞬間碰声,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工熬甫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胰挑,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓椿肩,卻偏偏與公主長得像瞻颂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子郑象,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容