標籤:update 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);
}
}