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;
import android.widget.Toast;
//第一版的时候,update里面的代码为空。由于不须要更新,之后版本号更新,就得在update里面写代码了

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 )";
// 更改表结构之后的,加入了两列。marker 和address
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的时候,触发这种方法了,下一次就不触发了,所以每次測试须要版本号号加1,正式公布不须要


// 1创建新表
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 )";


db.execSQL(sql_create_tansInfo);


// 2 删除旧表
String sql_drop_oldTable = "drop table transInfo";
db.execSQL(sql_drop_oldTable);


// 3表新表的名字改成旧表的名字
String sql_rename = "ALTER TABLE  transInfo_new RENAME TO transInfo";
db.execSQL(sql_rename);


// 提示更新了,正式公布可去掉这一句提示
Toast.makeText(context, "更新---------", 1).show();


// 注:假设仅仅是添加一列,事实上不须要创建新表。
// 运行 String sql="ALTER TABLE transInfo ADD COLUMN address text;";
// 就能够了。上述的方法是一个通用的方法


}


}


原文地址:https://www.cnblogs.com/cxchanpin/p/6889300.html