当前位置:Gxlcms > 数据库问题 > 浅谈SQLiteOpenHelper之onUpgrade例子

浅谈SQLiteOpenHelper之onUpgrade例子

时间:2021-07-01 10:21:17 帮助过:37人阅读

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

 

浅谈SQLiteOpenHelper之onUpgrade例子

标签:exec   title   char   layout   tar   key   port   例子   count   

人气教程排行