當你看到這個博文,首先你要了解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); } @Override public 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這個類的context
private TextView tv;
@Override
protected 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方法里更新。
