Android開(kāi)發(fā)中數(shù)據(jù)庫(kù)升級(jí)且表添加新列的方法
本文實(shí)例講述了Android開(kāi)發(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開(kāi)發(fā)入門與進(jìn)階教程》、《Android資源操作技巧匯總》、《Android視圖View技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Android9.0 SystemUI 網(wǎng)絡(luò)信號(hào)欄定制修改的流程解析
這篇文章主要介紹了Android9.0 SystemUI 網(wǎng)絡(luò)信號(hào)欄定制修改的流程,本文通過(guò)圖文實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
Android 二維碼 生成和識(shí)別二維碼 附源碼下載
這篇文章主要介紹了Android 生成和識(shí)別二維碼的方法,提供源碼下載,需要的朋友可以參考下。2016-06-06
Android后臺(tái)模擬點(diǎn)擊探索(附源碼)
這篇文章主要介紹了Android后臺(tái)模擬點(diǎn)擊探索(附源碼),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
android圖片類型之間相互轉(zhuǎn)換實(shí)現(xiàn)代碼
這篇文章主要介紹了android圖片類型之間相互轉(zhuǎn)換的方法,涉及Android實(shí)現(xiàn)各種常用圖片類型及字節(jié)類型的轉(zhuǎn)換技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Android中ViewPager實(shí)現(xiàn)滑動(dòng)條及與Fragment結(jié)合的實(shí)例教程
ViewPager類主要被用來(lái)實(shí)現(xiàn)可滑動(dòng)的視圖功能,這里我們就來(lái)共同學(xué)習(xí)Android中ViewPager實(shí)現(xiàn)滑動(dòng)條及與Fragment結(jié)合的實(shí)例教程,需要的朋友可以參考下2016-06-06
Android ScrollView只能添加一個(gè)子控件問(wèn)題解決方法
這篇文章主要介紹了Android ScrollView只能添加一個(gè)子控件問(wèn)題解決方法,涉及Android界面布局的相關(guān)技巧,需要的朋友可以參考下2016-02-02
Android自定義TitleView標(biāo)題開(kāi)發(fā)實(shí)例
這篇文章主要介紹了Android自定義TitleView標(biāo)題開(kāi)發(fā)實(shí)例的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
Android ScrollView的頂部下拉和底部上拉回彈效果
本篇文章主要介紹了Android ScrollView的頂部下拉和底部上拉回彈效果,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05

