淺談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);
        
    }

    @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方法里更新。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM