Android 数据库升级

数据库升级:v1.0-v2.1从v1.0升级到v2.01,不走oncreate,走onupdategrade直接安装v2.0,走onCreate;

v1.0-v3.0:分三种情况1.v1.0升级到v3.0: 不走onCreate,走onUpgrade2.v2.0升级到v3.0:不走onCreate,走onUpgrade3.直接安装v3.0:走onCreate,不走onUpgradepublic class DbHelper extends SQLiteOpenHelper {
   // private static final int DATABASE_VERSION = 1000;
    private static final int DATABASE_VERSION = 1001;
    //private static final int DATABASE_VERSION = 1002;
    private static final String DATABASE_NAME = "mall.db";
    private static DbHelper instance = null;

    /*操作数据库有两个非常重要的类:SQLiteDatabase和SQLiteOpenHelper
     * 1.SQLiteDatabase的实例便代表了SQLite数据库,通过SQLiteDatabase的一些常用方法,可以执行SQL语句,
     * 对数据库进行添加、删除、更新、查找和修改等操作
     * 2.SQLiteOpenHelper是一个辅助类,主要负责创建和打开数据库以及对数据库的版本进行管理。
     * SQLiteOpenHelper是一个抽象类,需要继承它并实现它的几个回调函数
     * */
   /*
    1.写内部类 继承SQLiteOpenHelper
    2.生成实现方法
      (1)创建  public void onCreate(SQLiteDatabase db) {
      (2)升级  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    3.生成器 调用父类的构造方法
     public DBHelper(String name, int version) {

    4.点击事件 调用构造方法DBHelper 创建 连接数据库
*/

    //内部类继承  需要自己生成构造器
    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    //创建对象(单例模式)
    public synchronized DbHelper getInstance(Context context) {
        if (instance == null) {
            instance = new DbHelper(context);
        }
        return instance;
    }

    //建表
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(SQL.CREATE_TABLE_fAVORATE);
        // 若不是第一个版本安装,直接执行数据库升级
        // 请不要修改FIRST_DATABASE_VERSION的值,其为第一个数据库版本大小
        final int FIRST_DATABASE_VERSION = 1000;
        onUpgrade(sqLiteDatabase, FIRST_DATABASE_VERSION, DATABASE_VERSION);

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
        // 使用for实现跨版本升级数据库
        for (int i = oldVersion; i < newVersion; i++) {
            switch (i) {
                case 1000:
                    //从v1.0升级到v1.1
                    upgradeToVersion1001(sqLiteDatabase);
                    break;
                case 1001:
                    //从v1.1升级到v1.2
                    upgradeToVersion1002(sqLiteDatabase);
                    break;

                default:
                    break;
            }
        }

    }

    private void upgradeToVersion1001(SQLiteDatabase db) {
        // favorite表新增1个字段
        String sql1 = "ALTER TABLE " + SQL.T_FAVORITE + " ADD COLUMN deleted VARCHAR";
        db.execSQL(sql1);
    }

    private void upgradeToVersion1002(SQLiteDatabase db) {
        // favorite表新增2个字段,添加新字段只能一个字段一个字段加,sqlite有限制不予许一条语句加多个字段
        String sql1 = "ALTER TABLE " + SQL.T_FAVORITE + " ADD COLUMN message VARCHAR";
        String sql2 = "ALTER TABLE " + SQL.T_FAVORITE + " ADD COLUMN type VARCHAR";
        db.execSQL(sql1);
        db.execSQL(sql2);

    }
}

//创建数据库(建表)
public class SQL {
    public static final String T_FAVORITE = "favorite";
    public static final String CREATE_TABLE_fAVORATE="create table T_FAVORITE if not exists" +
            "(_id integer primary key autoincrement," +
            "title varchar,url varchar," +
            "creataDate varchar)";
}

 
时间: 2024-10-27 02:39:42

Android 数据库升级的相关文章

Android 数据库升级完整解决方案

数据库升级的意义 我们在开发Android应用的时候,不可避免地要使用数据库.而数据库的结构在第一版的时候定下来,之后发布功能更新,或增加业务逻辑,原来的数据库结构可能就不适用了.而如果数据库的结构与之前版本的结构不同,新版本的应用读取旧数据库肯定会出问题.解决办法只有两种: 1.让用户卸载老版本再安装新的程序: 2.软件自行更新数据库结构. 第一种办法很明显不具备可操作性,而且用户一旦卸载软件,数据就丢失了,这是不能容忍的事情.因此,作为开发者必须妥善处理数据库的升级问题. 当然了,有的同学会

优雅的处理Android数据库升级的问题

原始完成于:2015-04-27 19:28:22 提供一种思路,优雅的处理Android数据库升级的问题,直接上代码: 1 package com.example.databaseissuetest; 2 3 import android.content.Context; 4 import android.database.sqlite.SQLiteDatabase; 5 import android.database.sqlite.SQLiteOpenHelper; 6 import and

Android数据库升级、降级、创建(onCreate() onUpgrade() onDowngrade())

数据库版本升级对软件的管理操作. 我们手机经常会收到xxx软件升级什么的提醒,你的软件版本更新,同时你的数据库对应的版本也要相应的更新. 数据库版本更新需要主要的问题: 软件的1.0版本升级到1.1版本时,老的数据不能丢. 那么在1.1版本的程序中就要有地方能够检测出来新的软件版本与老的数据库不兼容,并且能够有办法把1.0软件的数据库升级到1.1软件能够使用的数据库. 换句话说,要在1.0软件的数据库的那个表中增加那个字段,并赋予这个字段默认值. 当然有的时候我们对更新后的 版本并没有什么好感,

Android 数据库升级解决方案

转自:http://blog.csdn.net/leehong2005/article/details/9128501 请考虑如下情况: 在数据库升级时,不同版本的数据库,他们定义的表结构完全可能是不一样的,比如V1.0的表A有10个column,而在V1.1的表A有12个colum,在升级时,表A增加了两列,此时我们应该怎么做呢. 总体思路 1,将表A重命名,改了A_temp. 2,创建新表A. 3,将表A_temp的数据插入到表A. 下面代码列出了更新表的实现,upgradeTables,给

Android数据库升级实例

第一部分 Andoird的SQLiteOpenHelper类中有一个onUpgrade方法.帮助文档中只是说当数据库升级时该方法被触发.经过实践,解决了我一连串的疑问: 1. 帮助文档里说的“数据库升级”是指什么? 你开发了一个程序,当前是1.0版本.该程序用到了数据库.到1.1版本时,你在数据库的某个表中增加了一个字段.那么软件1.0版本用的数据库在软件1.1版本就要被升级了. 2. 数据库升级应该注意什么? 软件的1.0版本升级到1.1版本时,老的数据不能丢.那么在1.1版本的程序中就要有地

Android数据库升级、降级、创建(onCreate() onUpgrade() onDowngrade())的注意点

以下内容可以作为面试官在面试的时候的问题,感觉比较好,是比较常用的知识点,可以用来考察基础是否扎实. 也可以程序猿学习.开发中的注意点.因为稍微不注意,就有可能导致数据库不能用. DBAdapter.java是一个简单的类,主要用来进行数据库操作. 1 package com.example.test_20131218; 2 3 import android.content.Context; 4 import android.database.sqlite.SQLiteDatabase; 5 6

Android数据库升级,数据不丢失解决方案

假设要更新TableC表,建议的做法是: 1) 将TableC重命名为TableC_temp SQL语句可以这样写:ALERT TABLE TableC RENAME TO TableC_temp; 2) 创建新的TableC表 3) 将数据从TableC_temp中插入到TableC表中 SQL语句可以这样写:INSERT INTO TableC (Col1, Col2, Col3) SELECT (Col1, Col2, Col3) FROM TableC_temp; 经过这三步,Table

android数据库升级的措辞

在基类table增加upgrade操作: public abstract class DbBaseTable { private static final String TAG = "DbBaseTable"; /** * @return the DB table name */ abstract String getName(); /** * Creates the DB table according to the DB scheme * * @param db */ abstra

Android 数据库读取数据显示 [5]

2016-12-1 课程内容 昨天学了Android数据库升级.降级.创建 今天把数据库表里面的数据读取出来显示到手机屏幕上 下面代码是MainActivity.java 的代码 package com.example.winxinmff; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;