zoukankan      html  css  js  c++  java
  • Android Sqlite数据库版本升级管理初探

    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;
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
    //创建用户表
    db.execSQL("create table if not exists user_table (id integer primary key autoincrement,name varchar(32) not null)");
    }
    
    @Override
    public 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章习题
    生成树相关问题
    cf 710 E Generate a String
    树状数组(BIT)
    HDU 5360 Hiking(2015多校联合)
    Apache HttpClient4.0&HtmlCleaner用法
    Android中的长度单位详解(dp、sp、px、in、pt、mm)
    HDU 5328 Problem Killer(2015多校联合)
    HDU 5327 Olympiad(2015多校联合)
    HDU 5335 Walk Out(2015多校联合)
  • 原文地址:https://www.cnblogs.com/angrycode/p/3113306.html
Copyright © 2011-2022 走看看