Android Sqlite数据库版本升级管理初探

http://angrycode.cn/archives/428

在做Android项目涉及到版本升级,而数据库同样也会因为需求的变更而导致表的增减以及字段的增减。这是不可避免的。
麦洛刚开始做项目的时候很少考虑这个问题,但当软件需要升级版本后,数据库的表结构很有可能就改变了,如果不考虑数据库的版本升级,那么在软件升级时,就会因为数据库找不到
某些字段而出错。也不能把之前版本的数据库删除,因为以前版本的数据就会丢失。因此就需要认真的去管理数据库的版本了。

Android为开发者提供了SQLiteOpenHelper 这个访问数据库的接口。开发者只需要继承这个接口就可以了,它对外提供了两个方法:onCreate(SQLiteDatabase db)与
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。这两个方法都是由系统自动调用的。
onCreate()方法用于初次使用时系统会检查数据库的是否文件.如果不存在则创建数据库表;如果存在则检查数据库的版本号,如果这次的版本号比上次的版本号高,则调用onUpgrade()更新数据库表结构。

在SQLiteOpenHelper的子类的构造方法里面需要传递一个数据库的版本号,这个版本号是从1开始的,随着版本的更新,这个号码也是不断变化的。
例如软件在最初时的数据库版本是1,下次在升级的时候,就需要更改为2了(当然只要改成比上次的版本号要大就行了)。

下面是一个简单例子,angrycode:

<pre>public class DatabaseHelper extends SQLiteOpenHelper {/*** log tag*/private static final String TAG = "DatabaseHelper";/*** 数据库名称*/private static final String DB_NAME = "user_manager.db";/*** 数据库版本号,默认从1开始,2013/5/31升级为2,需要数据库更新时,更改此值。*/private static final int DB_VERSION = 2;private static DatabaseHelper instance = new DatabaseHelper(MyApplication.getContext());private DatabaseHelper(Context context) {super(context, DB_NAME, null, DB_VERSION);}private DatabaseHelper(Context context,int version){super(context,DB_NAME,null,version);}public static DatabaseHelper getDatabaseHelper(){return instance;}@Overridepublic void onCreate(SQLiteDatabase db) {//创建用户表db.execSQL("create table if not exists user_table (id integer primary key autoincrement,name varchar(32) not null)");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//这里对表进行修改//String sql1 = "DROP TABLE IF EXISTS user_table;";String sql7 = "ALTER TABLE user_table ADD COLUMN phone_number varchar(15);    db.execSQL(sql7);//onCreate(db);}</pre>

更多相关文章

  1. 条码扫描二维码扫描—ZXing android 改进版本
  2. Android(安卓)Linux 开发环境搭建
  3. Android之利用SQLite数据库实现登陆和注册
  4. Android(安卓)BLE程序在Android(安卓)10手机搜不到设备问题分析
  5. android中数据库创建操作的模式
  6. 原生Android集成Flutter混合开发
  7. ,在 java 1.8.0 版本的环境下,进行 android apk 的签名操作
  8. Android系列之GreenDao数据升级和加密(三)
  9. 安卓NDK——原生开发工具包

随机推荐

  1. android 笔记 --- Android自动判断输入是
  2. 【Android】Android Studio使用gradle导
  3. Android大赛首轮获奖作品解析。。。
  4. Android中文API(119)——TableRow
  5. Android 开发笔记——全局变量
  6. Android开发(十一)——ImageView的尺寸设置
  7. Android关于ListView中的getItemViewType
  8. Android学习以及如何用android赚钱
  9. Android通知Notification的使用
  10. android 获取屏幕高度和宽度 的方法