浅谈SQLiteOpenHelper之onUpgrade例子
當(dāng)你看到這個(gè)博文,首先你要了解onCreate這個(gè)創(chuàng)建方法,再來(lái)繼續(xù)下文!(可以參考我的上一個(gè)博文http://www.cnblogs.com/896240130Master/p/6119616.html)
這個(gè)onUpgrade類(lèi)要在onCreate類(lèi)的基礎(chǔ)上建立!我們知道onUpgrade是升級(jí)的意思。
看代碼:新建一個(gè)類(lèi)SqlText.java
package com.example.sjk;import android.content.Context; import android.database.sqlite.SQLiteCursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log;public class SqlText extends SQLiteOpenHelper{private static final String DB_NAME = "mydata.db"; //數(shù)據(jù)庫(kù)名稱(chēng)private static final int version =2; // 當(dāng)前數(shù)據(jù)庫(kù)版本號(hào)是升級(jí)到2了public SqlText(Context context) {super(context, DB_NAME, null, version);}@Overridepublic void onCreate(SQLiteDatabase db) { //新安裝的軟件從這里開(kāi)始String sql_message = "create table t_message (id int primary key,name varchar(50),age varchar(50),sex varchar(10))";//升級(jí)的時(shí)候增加了一個(gè)列sex,所以為了和版本2升級(jí)的一樣這里也要對(duì)應(yīng)db.execSQL(sql_message);Log.i("onCreate", "你是新用戶(hù),我們?cè)趲湍銊?chuàng)建表--->成功");String sql_up1 = "insert into t_message values(1,'小白','18','男')";db.execSQL(sql_up1);Log.i("onCreate", "你是新用戶(hù),我們幫你插入一條數(shù)據(jù)-->成功");}@Override//在原來(lái)的軟件上更新會(huì)從這里開(kāi)始,不卸載在線(xiàn)更新public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //本文討論這個(gè)方法if(oldVersion == 1){//如果版本是1.0的,升級(jí)下面的內(nèi)容或修改String sql_upgrade = "alter table t_message add sex varchar(10)";//增加一個(gè)列sex db.execSQL(sql_upgrade);String sql_up2 ="insert into t_message values(3,'小紅','18','男')";db.execSQL(sql_up2);Log.i("onUpgrade","你在沒(méi)有卸載的情況下,在線(xiàn)更新了版本2.0,同時(shí)列表增加了一個(gè)列sex"); }}}?
在MainActivity.java 顯示
package com.example.sjk; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.widget.TextView;public class MainActivity extends Activity {private SqlText st; //得到SqlText這個(gè)類(lèi)的contextprivate TextView tv; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.TextView);//找到這個(gè)TextView組件st = new SqlText(MainActivity.this);String text = query();//調(diào)用查詢(xún)這個(gè)方法tv.setText("id \t"+"name\t"+"age\t"+"sex\n"+text+"\n");//顯示}public String query(){//查詢(xún)數(shù)據(jù)庫(kù)的數(shù)據(jù)String result = "";//獲取數(shù)據(jù)庫(kù)對(duì)象SQLiteDatabase db = st.getReadableDatabase();//只讀:ReadableDatabase;讀寫(xiě):WritableDatabase//查詢(xún)數(shù)據(jù)庫(kù)中的數(shù)據(jù)Cursor cursor = db.query("t_message", null, null, null, null, null, null);//結(jié)果集for(int i=0;i<cursor.getCount();i++) {cursor.moveToNext();result += cursor.getInt(cursor.getColumnIndex("id"));result += cursor.getString(cursor.getColumnIndex("name"));result += cursor.getString(cursor.getColumnIndex("age")); result += cursor.getString(cursor.getColumnIndex("sex")); }cursor.close();//關(guān)閉結(jié)果集db.close();//關(guān)閉數(shù)據(jù)庫(kù)對(duì)象return result;}}
現(xiàn)在我們?cè)诎姹咎?hào)1上,安裝這個(gè)新的版本2。也就是說(shuō)也就是說(shuō)不卸載版本1,直接覆蓋版本2看下圖
更新了版本,并且增加了一個(gè)列
?
?
我們插入的是一條數(shù)據(jù),為什么是兩條呢,是因?yàn)槲覀冊(cè)诎姹?.0的時(shí)候就已經(jīng)有了一條數(shù)據(jù),后面sex在1.0的時(shí)候沒(méi)有所以是null,
?
我們?cè)賮?lái)第2次測(cè)試,卸載安裝的。重新安裝看看還是原來(lái)的數(shù)據(jù)或者執(zhí)行的是onCreate方法還是onUpgrade 方法?
?
結(jié)果:
?
?顯示:
我們的出一個(gè)結(jié)論:
當(dāng)你Android安裝一個(gè)全新的應(yīng)用,會(huì)從onCreate這個(gè)方法里創(chuàng)建。
當(dāng)你Android在舊版本上更新的時(shí)候會(huì)從onUpgrade方法里更新。
?
轉(zhuǎn)載于:https://www.cnblogs.com/896240130Master/p/6128557.html
總結(jié)
以上是生活随笔為你收集整理的浅谈SQLiteOpenHelper之onUpgrade例子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 梦到被蛇缠身上预示着什么
- 下一篇: 简单的方式优化mysql