Android当Sqlite 增加字段或者减少字段时如何不让程序崩溃。

问题描述:当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操作即可。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值