sqlite自動更新資料庫

來源:互聯網
上載者:User

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


}






}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.