浅谈SQLiteOpenHelper之onUpgrade例子
生活随笔
收集整理的這篇文章主要介紹了
浅谈SQLiteOpenHelper之onUpgrade例子
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
當你看到這個博文,首先你要了解onCreate這個創建方法,再來繼續下文!(可以參考我的上一個博文http://www.cnblogs.com/896240130Master/p/6119616.html)
這個onUpgrade類要在onCreate類的基礎上建立!我們知道onUpgrade是升級的意思。
看代碼:新建一個類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"; //數據庫名稱private static final int version =2; // 當前數據庫版本號是升級到2了public SqlText(Context context) {super(context, DB_NAME, null, version);}@Overridepublic void onCreate(SQLiteDatabase db) { //新安裝的軟件從這里開始String sql_message = "create table t_message (id int primary key,name varchar(50),age varchar(50),sex varchar(10))";//升級的時候增加了一個列sex,所以為了和版本2升級的一樣這里也要對應db.execSQL(sql_message);Log.i("onCreate", "你是新用戶,我們在幫你創建表--->成功");String sql_up1 = "insert into t_message values(1,'小白','18','男')";db.execSQL(sql_up1);Log.i("onCreate", "你是新用戶,我們幫你插入一條數據-->成功");}@Override//在原來的軟件上更新會從這里開始,不卸載在線更新public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //本文討論這個方法if(oldVersion == 1){//如果版本是1.0的,升級下面的內容或修改String sql_upgrade = "alter table t_message add sex varchar(10)";//增加一個列sex db.execSQL(sql_upgrade);String sql_up2 ="insert into t_message values(3,'小紅','18','男')";db.execSQL(sql_up2);Log.i("onUpgrade","你在沒有卸載的情況下,在線更新了版本2.0,同時列表增加了一個列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這個類的contextprivate TextView tv; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.TextView);//找到這個TextView組件st = new SqlText(MainActivity.this);String text = query();//調用查詢這個方法tv.setText("id \t"+"name\t"+"age\t"+"sex\n"+text+"\n");//顯示}public String query(){//查詢數據庫的數據String result = "";//獲取數據庫對象SQLiteDatabase db = st.getReadableDatabase();//只讀:ReadableDatabase;讀寫:WritableDatabase//查詢數據庫中的數據Cursor cursor = db.query("t_message", null, null, null, null, null, null);//結果集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();//關閉結果集db.close();//關閉數據庫對象return result;}}
現在我們在版本號1上,安裝這個新的版本2。也就是說也就是說不卸載版本1,直接覆蓋版本2看下圖
更新了版本,并且增加了一個列
?
?
我們插入的是一條數據,為什么是兩條呢,是因為我們在版本1.0的時候就已經有了一條數據,后面sex在1.0的時候沒有所以是null,
?
我們再來第2次測試,卸載安裝的。重新安裝看看還是原來的數據或者執行的是onCreate方法還是onUpgrade 方法?
?
結果:
?
?顯示:
我們的出一個結論:
當你Android安裝一個全新的應用,會從onCreate這個方法里創建。
當你Android在舊版本上更新的時候會從onUpgrade方法里更新。
?
轉載于:https://www.cnblogs.com/896240130Master/p/6128557.html
總結
以上是生活随笔為你收集整理的浅谈SQLiteOpenHelper之onUpgrade例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到被蛇缠身上预示着什么
- 下一篇: 梦到鬼附身预示着什么