首页 > 代码库 > 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);
}
}