问题描述:当App一个版本上线后,如果本地的sqlite 数据库表中需要增加一个字段。直接增加,老用户如果不卸载重装,必然会导致程序崩溃。所以我们通过
SQLiteOpenHelper类来管理。
解决办法:
1.首先继承SQLiteOpenHelper类,然后实例化该对象。(例如helper)
2.获取SQLiteDatabase对象:SQLiteDatabase db = helper.getWritableDatabase();
3.通过db来操作数据库或者close数据库。
SQLiteOpenHelper类代码,注释写的比较详细:
package com.ysepay.mobileportal.sqlite;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class YsSQLiteOpenHelper extends SQLiteOpenHelper {
public YsSQLiteOpenHelper(Context context) {
//当数据库版本需要升级修改时,增加版本号。
super(context, "mobileportal.s3db", null, 2);
}
@Override
public void onCreate(SQLiteDatabase db) {
//在这里创建表,增加字段时这里也需要增加字段,不然新用户安装会报错。
db.execSQL("CREATE table IF NOT EXISTS Attention"
+ " (userCode TEXT,bizNo TEXT,name TEXT,imgNo TEXT,memo TEXT,createTime TEXT," +
"updateTime TEXT,type TEXT,attention TEXT,attCount TEXT,attCreateTime TEXT," +
"attUpdateTime TEXT,curMsgId TEXT,newestMsgMemo TEXT," +
"newMsgCount TEXT)");
/**
* 用户好友表:Contacts:
*/
db.execSQL("CREATE table IF NOT EXISTS contacts"
+ " (host_user_code Text,friend_user_code TEXT,friend_mobile_no TEXT," +
"friend_email TEXT,friend_qq TEXT,friend_merchant_no TEXT,sys_tag TEXT," +
"user_tag TEXT,friend_name TEXT,friend_photo_url TEXT)");
/**
* 标签表:Tag
*/
db.execSQL("CREATE table IF NOT EXISTS tags (owner_code Text,Tag01 Text," +
"Tag02 Text,Tag03 Text,Tag04 Text,Tag05 Text,Tag06 Text,Tag07 Text," +
"Tag08 Text,Tag09 Text,Tag10 Text,Tag11 Text,Tag12 Text,Tag13 Text," +
"Tag14 Text,Tag15 Text,Tag16 Text,Tag17 Text,Tag18 Text,Tag19 Text," +
"Tag20 Text,Tag21 Text,Tag22 Text,Tag23 Text,Tag24 Text,Tag25 Text," +
"Tag26 Text,Tag27 Text,Tag28 Text,Tag29 Text,Tag30 Text)");
// db.execSQL("create table if not exists groups (id integer primary key,group_name TEXT)");
db.execSQL("create table if not exists home_sign_user (user_name text,home_sign_id integer)");
db.execSQL("create table if not exists home_sign (id integer primary key," +
"name text,net_url text,local_url text,state integer,method integer)");
/*
* 创建私有消息缓存表
*/
db.execSQL("CREATE table IF NOT EXISTS PrivateMsg"
+ " (msgId TEXT,bizNo TEXT,userCode TEXT,content TEXT,beginTime TEXT," +
"endTime TEXT,createTime TEXT,imgNo TEXT,memo TEXT)");
/*
* 创建公有消息缓存表
*/
db.execSQL("CREATE table IF NOT EXISTS PublicMsg"
+ " (msgId TEXT,userCode TEXT,bizNo TEXT,content TEXT,createTime TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (newVersion == oldVersion) {
return;
}
//当新版本高于老版本时,在这里更新表 。如果第3次需要修改数据库时,记得删除上次的修改语句。
db.execSQL("ALTER TABLE Attention ADD userCode TEXT");
}
}
当其他类需要操作数据库表时,实例化该对象.通过
getWritableDatabase(),或者getReadbleDatabase().拿到db操作即可。