Android開發(fā)中數(shù)據(jù)庫(kù)升級(jí)且表添加新列的方法
本文實(shí)例講述了Android開發(fā)中數(shù)據(jù)庫(kù)升級(jí)且表添加新列的方法。分享給大家供大家參考,具體如下:
今天突然想到我們android版本升級(jí)的時(shí)候經(jīng)常會(huì)遇到升級(jí)版本的時(shí)候在新版本中數(shù)據(jù)庫(kù)可能會(huì)修改,今天我們就以數(shù)據(jù)庫(kù)升級(jí)且表添加新列為例子寫一個(gè)測(cè)試程序。
首先在要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫(kù),一般我們先創(chuàng)建一個(gè)DbHelper,繼承SQLiteOpenHelper,構(gòu)造函數(shù)我們使用傳遞版本號(hào)的:
public DbHelper(Context context, String name, int version){
this(context, name, null, version);
}
我們?cè)贏ctivity中初始化DbHelper傳入當(dāng)前應(yīng)用的版本號(hào),
try {
ver=getVersionName(getApplicationContext());
} catch (Exception e) {
e.printStackTrace();
}
myDbHelper = new DbHelper(this,DbHelper.DB_NAME,ver);
db= myDbHelper.getWritableDatabase();
我們通過(guò)查看SQLiteOpenHelpe源碼知道,當(dāng)我們調(diào)用
getWritableDatabase()
時(shí),會(huì)調(diào)用
getDatabaseLocked(boolean writable)
方法,往下面看可以看到當(dāng)版本號(hào)大于當(dāng)前的時(shí)候會(huì)調(diào)用onUpgrade方法,我們可以在這里做升級(jí)數(shù)據(jù)庫(kù)操作:
final int version = db.getVersion();
if (version != mNewVersion) {
if (db.isReadOnly()) {
throw new SQLiteException("Can't upgrade read-only database from version " +
db.getVersion() + " to " + mNewVersion + ": " + mName);
}
db.beginTransaction();
try {
if (version == 0) {
onCreate(db);
} else {
if (version > mNewVersion) {
onDowngrade(db, version, mNewVersion);
} else {
onUpgrade(db, version, mNewVersion);
}
}
db.setVersion(mNewVersion);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
因此我在onUpgrade方法中做了表添加新列操作如下:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if(newVersion>oldVersion)
{
db.execSQL("ALTER TABLE local_picc_talk ADD talknumber varchar(20);");
}
}
這樣執(zhí)行完之后就會(huì)多一列talknumber,
select * from sqlite_master where type="table" and name="local_picc_talk"; table|local_picc_talk|local_picc_talk|9|CREATE TABLE local_picc_talk (id integer PRIMARY KEY autoincrement,case_no varchar(60),user_no varchar(60),user_name var char(60),car_no varchar(60),task_work_id varchar(60),talk_content varchar(1000), time varchar(60),with_talk_no varchar(60),with_talk_name varchar(60), talknumber varchar(20), UNIQUE (id)) sqlite> select * from local_picc_talk;
這樣就完成了版本升級(jí)的時(shí)候數(shù)據(jù)庫(kù)升級(jí),并且為表添加新的一列。
DEMO代碼在:https://github.com/xxnan/DataBaseUpdateTest
或者點(diǎn)擊此處本站下載。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android數(shù)據(jù)庫(kù)操作技巧總結(jié)》、《Android操作SQLite數(shù)據(jù)庫(kù)技巧總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android資源操作技巧匯總》、《Android視圖View技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Android開發(fā)實(shí)現(xiàn)Gallery畫廊效果的方法
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)Gallery畫廊效果的方法,結(jié)合具體實(shí)例形式分析了Android使用Gallery實(shí)現(xiàn)畫廊功能的具體操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-06-06
Android WebView 內(nèi)處理302重定向不跳轉(zhuǎn)的解決
這篇文章主要介紹了Android WebView 內(nèi)處理302重定向不跳轉(zhuǎn)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
Android 數(shù)據(jù)存儲(chǔ)方式有哪幾種
android為數(shù)據(jù)存儲(chǔ)提供了五種方式,有SharedPreferences、文件存儲(chǔ)、SQLite數(shù)據(jù)庫(kù)、ContentProvider、網(wǎng)絡(luò)存儲(chǔ),對(duì)android數(shù)據(jù)存儲(chǔ)方式感興趣的朋友可以通過(guò)本文學(xué)習(xí)一下2015-11-11
Android Walker登錄記住密碼頁(yè)面功能實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Android Walker登錄記住密碼頁(yè)面功能的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05
android使用service和activity獲取屏幕尺寸的方法
這篇文章主要介紹了android使用service和activity獲取屏幕尺寸的方法,實(shí)例分析了基于service和activity兩種方法獲取屏幕尺寸的相關(guān)技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-08-08
Android kotlin+協(xié)程+Room數(shù)據(jù)庫(kù)的簡(jiǎn)單使用
這篇文章主要介紹了Android kotlin+協(xié)程+Room數(shù)據(jù)庫(kù)的簡(jiǎn)單使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
Android自定義Button并設(shè)置不同背景圖片的方法
這篇文章主要介紹了Android自定義Button并設(shè)置不同背景圖片的方法,涉及Android自定義控件的功能實(shí)現(xiàn)與布局相關(guān)技巧,需要的朋友可以參考下2016-01-01

