首页 > 代码库 > sqlite自动更新数据库

sqlite自动更新数据库

写一个类继承自  SQLiteOpenHelper

系统会自动添加构造方法、 onCreate方法、onUpgrade方法

当数据库里面数据或者表结构有所改动时,咱们需要升级数据库

这个时候,版本加1.在update里面做相应修改。

需要注意的是,如果需要测试update,每次开始测试,version 值增大,如果和上次的相同,就不会促发update方法了

下面贴上代码

先是原来的表结构,对应的代码


import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;


public class DataHelp extends SQLiteOpenHelper {


public static String name = "sxjj.db3";
public static int  version = 1;


public DataHelp(Context context, String name, CursorFactory factory,
int version) {
super(context, name, null, version);
}






public void onCreate(SQLiteDatabase db) {


String sql_tansInfo = "create table if not exists transInfo(id integer primary key autoincrement, name nvarchar(50), tel nvarchar(20), content text,  type int)";
db.execSQL(sql_tansInfo);





}


public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {


}






}



现在的表结构,对应的代码

import com.ylj.sxbmzx.view.QueryTransInfoActivity;


import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.widget.Toast;


public class DataHelp extends SQLiteOpenHelper {


public static String name = "sxjj.db3";
public static int  version =3;
Context context=null;


public DataHelp(Context context, String name, CursorFactory factory,
int version) {

super(context, name, null, version);
this.context=context;
}






public void onCreate(SQLiteDatabase db) {
// String sql_tansInfo = "create table if not exists transInfo(id integer primary key autoincrement, name nvarchar(50), tel nvarchar(20), content text,type int,address text,marker text )";




String sql_tansInfo = "create table if not exists transInfo(id integer primary key autoincrement, name nvarchar(50), tel nvarchar(20), content text,type int,address text,marker text )";
db.execSQL(sql_tansInfo);





}


public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
//第一次运行,版本加1的时候,触发这个方法了,下一次就不触发了


// String sql_tansInfo = "create table if not exists transInfo1(id integer primary key autoincrement, name nvarchar(50), tel nvarchar(20), content text,marker text,  type int,address text)";

// db.execSQL(sql_tansInfo);
// String sql_tansInfo_insert = "INSERT INTO transInfo1(id integer primary key autoincrement, name nvarchar(50), tel nvarchar(20), content text,marker text,  type int,address text)";



// String sql_delete="delete from transInfo";
// db.execSQL(sql_delete);
// String sql="ALTER TABLE transInfo ADD COLUMN address text;";
// db.execSQL(sql);
//
// String sql2="ALTER TABLE transInfo ADD COLUMN marker text;";
// db.execSQL(sql2);


Toast.makeText(context, "更新---------", 1).show();
//经测算证明alter table 这一句真的执行了,查出来的address 为null
//现在不知道alter table 之后,原来的数据是否还保留着,经测试还保留者,但是新的字段是空的,没数据
//改程序后,查的时候,必然要把新的字段也查出来,所以,重新插入数据吧

//现在的表,其实是要添加两列,那我得执行两次插入列,也可以把原来的表删除,重新建表

//添加两列这种,以后版本增加,也不合适


String sql_create_tansInfo = "create table if not exists transInfo_new(id integer primary key autoincrement, name nvarchar(50), tel nvarchar(20), content text,type int,address text,marker text )";
        //不用 insert 了
  db.execSQL(sql_create_tansInfo);
  String sql_drop_oldTable="drop table transInfo";
  db.execSQL(sql_drop_oldTable);
  String sql_rename="ALTER TABLE  transInfo_new RENAME TO transInfo";
  db.execSQL(sql_rename);
 


}






}