欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Android中怎么升級(jí)SQLite數(shù)據(jù)庫(kù)版本

這篇文章給大家介紹Android中怎么升級(jí)SQLite數(shù)據(jù)庫(kù)版本,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

十余年的樂亭網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整樂亭建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“樂亭網(wǎng)站設(shè)計(jì)”,“樂亭網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

Android SQLite數(shù)據(jù)庫(kù)版本升級(jí)的管理實(shí)現(xiàn)

我們知道在SQLiteOpenHelper的構(gòu)造方法:

super(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)

中最后一個(gè)參數(shù)表示數(shù)據(jù)庫(kù)的版本號(hào).當(dāng)新的版本號(hào)大于當(dāng)前的version時(shí)會(huì)調(diào)用方法:

onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

所以我們的重點(diǎn)是在該方法中實(shí)現(xiàn)SQLite數(shù)據(jù)庫(kù)版本升級(jí)的管理

當(dāng)我們項(xiàng)目剛開始的時(shí)候第一版SQLiteOpenHelper是這樣寫的:

package cc.database; 
 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 
/** 
 * Demo描述: 
 * SQLite數(shù)據(jù)庫(kù)版本升級(jí)的管理實(shí)現(xiàn) 
 * 
 * 參考資料: 
 * http://blog.csdn.net/guolin_blog 
 * Thank you very much 
 */ 
public class DataBaseOpenHelper extends SQLiteOpenHelper { 
  private final static String DATABASE_NAME="test.db"; 
  private static DataBaseOpenHelper mDataBaseOpenHelper; 
   
  public static final String CREATE_PERSON= 
  "create table person(personid integer primary key autoincrement,name varchar(20),phone VARCHAR(12))"; 
   
  public DataBaseOpenHelper(Context context,String name,CursorFactory factory,int version) { 
    super(context, name, factory, version); 
  } 
 
   
  //注意: 
  //將DataBaseOpenHelper寫成單例的. 
  //否則當(dāng)在一個(gè)for循環(huán)中頻繁調(diào)用openHelper.getWritableDatabase()時(shí) 
  //會(huì)報(bào)錯(cuò),提示數(shù)據(jù)庫(kù)沒有執(zhí)行關(guān)閉操作 
  static synchronized DataBaseOpenHelper getDBInstance(Context context) { 
    if (mDataBaseOpenHelper == null) { 
      mDataBaseOpenHelper = new DataBaseOpenHelper(context,DATABASE_NAME,null,1); 
    } 
    return mDataBaseOpenHelper; 
  }  
   
  @Override 
  public void onCreate(SQLiteDatabase db) { 
    db.execSQL(CREATE_PERSON); 
  } 
 
  @Override 
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     
  } 
 
}

在幾天之后根據(jù)項(xiàng)目需求,需要添加一張student表,于是DataBaseOpenHelper就出現(xiàn)了第二版:

package cc.database; 
 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 
 
public class DataBaseOpenHelper extends SQLiteOpenHelper { 
  private final static String DATABASE_NAME="test.db"; 
  private static DataBaseOpenHelper mDataBaseOpenHelper; 
   
  public static final String CREATE_PERSON= 
  "create table person(personid integer primary key autoincrement,name varchar(20),phone VARCHAR(12))"; 
   
  public static final String CREATE_STUDENT= 
  "create table student(studentid integer primary key autoincrement,name varchar(20),phone VARCHAR(12))"; 
   
  public DataBaseOpenHelper(Context context,String name,CursorFactory factory,int version) { 
    super(context, name, factory, version); 
  } 
 
   
  //注意: 
  //將DataBaseOpenHelper寫成單例的. 
  //否則當(dāng)在一個(gè)for循環(huán)中頻繁調(diào)用openHelper.getWritableDatabase()時(shí) 
  //會(huì)報(bào)錯(cuò),提示數(shù)據(jù)庫(kù)沒有執(zhí)行關(guān)閉操作 
  static synchronized DataBaseOpenHelper getDBInstance(Context context) { 
    if (mDataBaseOpenHelper == null) { 
      //改動(dòng)1 
      mDataBaseOpenHelper = new DataBaseOpenHelper(context,DATABASE_NAME,null,2); 
    } 
    return mDataBaseOpenHelper; 
  }  
   
  @Override 
  public void onCreate(SQLiteDatabase db) { 
    db.execSQL(CREATE_PERSON); 
    //改動(dòng)2 
    db.execSQL(CREATE_STUDENT); 
  } 
 
  @Override 
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    //改動(dòng)3 
    switch (oldVersion) { 
     
    case 1: 
    db.execSQL(CREATE_STUDENT); 
 
    default: 
    } 
  } 
 
}

較版本一在版本二中有三處修改的地方:

1 版本號(hào)變成了2

2 在onCreate()方法中添加了代碼db.execSQL(CREATE_STUDENT);創(chuàng)建student表

   因?yàn)橛械挠脩舾揪蜎]有第一版本的APP,直接從市場(chǎng)下載了第二版本的App。所以當(dāng)然會(huì)執(zhí)行onCreate()而不會(huì)執(zhí)行onUpgrade()

3 在onUpgrade()做了處理:當(dāng)oldVersion為1時(shí)調(diào)用db.execSQL(CREATE_STUDENT);創(chuàng)建student表
   因?yàn)橛械挠脩羰謾C(jī)上本來就有第一版本的APP,所以在App升級(jí)到第二版本時(shí)會(huì)執(zhí)行onUpgrade(),不會(huì)執(zhí)行onCreate()

通過這樣的處理使得不同的情況下使用第二版APP時(shí)都會(huì)生成student表

又過了一個(gè)月,根據(jù)項(xiàng)目變更,需要給person表添加一個(gè)字段genderid,于是DataBaseOpenHelper就出現(xiàn)了第三版:

package cc.database; 
 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 
 
public class DataBaseOpenHelper extends SQLiteOpenHelper { 
  private final static String DATABASE_NAME="test.db"; 
  private static DataBaseOpenHelper mDataBaseOpenHelper; 
   
  //改動(dòng)1 
  public static final String CREATE_PERSON= 
  "create table person(personid integer primary key autoincrement,name varchar(20),phone VARCHAR(12)),genderid integer)"; 
   
  public static final String ALTER_PERSON="alter table person add column genderid integer"; 
   
  public static final String CREATE_STUDENT= 
  "create table student(studentid integer primary key autoincrement,name varchar(20),phone VARCHAR(12))"; 
   
  public DataBaseOpenHelper(Context context,String name,CursorFactory factory,int version) { 
    super(context, name, factory, version); 
  } 
 
   
  //注意: 
  //將DataBaseOpenHelper寫成單例的. 
  //否則當(dāng)在一個(gè)for循環(huán)中頻繁調(diào)用openHelper.getWritableDatabase()時(shí) 
  //會(huì)報(bào)錯(cuò),提示數(shù)據(jù)庫(kù)沒有執(zhí)行關(guān)閉操作 
  static synchronized DataBaseOpenHelper getDBInstance(Context context) { 
    if (mDataBaseOpenHelper == null) { 
      //改動(dòng)2 
      mDataBaseOpenHelper = new DataBaseOpenHelper(context,DATABASE_NAME,null,3); 
    } 
    return mDataBaseOpenHelper; 
  }  
   
  @Override 
  public void onCreate(SQLiteDatabase db) { 
    db.execSQL(CREATE_PERSON); 
    db.execSQL(CREATE_STUDENT); 
  } 
 
  @Override 
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    switch (oldVersion) { 
     
    case 1: 
    db.execSQL(CREATE_STUDENT); 
     
    //改動(dòng)3 
    case 2: 
    db.execSQL(ALTER_PERSON); 
 
    default: 
    } 
  } 
 
}

較版本二在版本三中有三處修改的地方:

1 改變了CREATE_PERSON語(yǔ)句,在改語(yǔ)句中增加了一個(gè)字段genderid 

  和前面的描述類似,有的用戶第一次安裝該APP時(shí)就直接下載了第三版

2 修改版本號(hào)為3

   應(yīng)對(duì)了用戶從第一版本或者第二版本升級(jí)到第三版本的情況(見下分析)

3 在onUpgrade()方法中)做了處理:當(dāng)oldVersion為2時(shí)調(diào)用 db.execSQL(ALTER_PERSON);修改person表,增加genderid字段

   應(yīng)對(duì)了用戶從第二版本升級(jí)到第三版本的情況(見下分析)

注意一個(gè)問題:為什么這里的switch語(yǔ)句在每個(gè)case中沒有break???

這是為了保證跨版本升級(jí)的時(shí)候每次數(shù)據(jù)庫(kù)的升級(jí)都會(huì)執(zhí)行到。

比如從第二版升級(jí)到第三版本,那么case 2會(huì)被執(zhí)行。

比如從第一版直接升級(jí)到第三版本,那么case 1肯定會(huì)被調(diào)用,由于沒有break所以會(huì)穿透switch語(yǔ)句又執(zhí)行case 2語(yǔ)句繼續(xù)升級(jí),從而保證了數(shù)據(jù)的所有版本中的升級(jí)都會(huì)被執(zhí)行到。

關(guān)于Android中怎么升級(jí)SQLite數(shù)據(jù)庫(kù)版本就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

分享文章:Android中怎么升級(jí)SQLite數(shù)據(jù)庫(kù)版本
分享鏈接:http://aaarwkj.com/article18/igcsgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、小程序開發(fā)面包屑導(dǎo)航、動(dòng)態(tài)網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
亚洲黄色成人免费观看| 国产白丝精品爽爽久久| 日韩一区二区人妻在线| 亚洲香蕉视频免费在线观看 | 美女午夜精品国产福利| 极品人妻视频中文字幕| 中文字幕伦理一区二区| 欧美亚洲精品在线观看| 久久97精品人人做人人爽| 密臀精品国产一区二区| 亚洲最新精品一区二区| 免费特黄特黄的欧美大片| 日韩精品一区二区三区电影在线播放| 日本av免费观看一区二区| 亚洲成av人片又粗又长| 欧美又粗又成人大视频| 日本电影在线看一区二区| 国产精品粉嫩在线播放| 日韩女同一区二区三区在线观看| 国产精品久久黑丝诱惑| 国产成人三级在线影院| 国产乱av一区二区三区| 日韩日韩毛片日韩毛片| 国产一区二区三区午夜视频| 久久久久久极精品久久久| 精品国产美女主播在线| 精品色欧美色国产一区国产| 亚洲国产韩国精品在线| 美女高潮啪啪啪91| 国外男女性生活在线视频| 日韩中文字幕乱码一区| 国产不卡的视频在线观看| 中文字幕91在线播放| 亚洲情欲一级片日韩欧美| 亚洲欧美国产日韩天堂区| 麻豆精品情欲人妻二区| 国产精品国产亚洲av| 天堂av在线免费观看| 丰满人妻的诱惑中文字幕| 91人妻精品丰满少妇区| 九九视频免费观看5|