sqlite数据库的创建,升级和降级

SQLiteOpenHelper是Android中管理SQLite数据库的关键类,用于创建、升级和降级数据库。创建数据库时,需要继承SQLiteOpenHelper并重写onCreate()和onUpgrade()方法。onCreate()仅在数据库首次创建时执行,onUpgrade()则在数据库版本升级时运行,而onDowngrade()在降级数据库时触发。数据库升级和降级需根据版本号差异调整数据库结构和数据。

SQLiteOpenHelper,数据库的创建,升级和降级

SQLiteOpenHelper

SQLiteOpenHelper 是一个辅助类,负责管理数据库的创建和数据库版本的管理。我们要使用这个类,必须写一个类继承它,并实现它的两个抽象方法:onCreate()onUpgrade().oncreate()方法只在数据库创建的时候执行一次,也就是说我们要创建的数据库在SQLite里面还没创建时,才会执行。onUpgrade() 方法用于数据库版本的升级。onDowmgrade() 方法用于数据库版本的降级。

  1. 数据库创建
    通过SQLiteOpenHelper类来创建一个数据库,首先,创建一个MySQLiteOpenHelper类继承SQLiteOpenHelper类,重写它必须的两个方法,及写一个构造器调用父类的构造器(SQLiteOpenHelper类有两个构造器可选,我们选其中一个即可).在调用SQLiteOpenHelper的构造器时,可以指定要打开的数据库,版本号等,并创建一个SQLiteOpenHelper对象,但并不会创建或打开数据库。在SQLiteOpenHelper 中提供了两个方法用来 创建/打开 数据库: getReadableDatabase()getWritableDatabase() .只有在调用这两个方法时,数据库才会创建或打开,并返回一个 SQLiteDatabase 对象(SQLiteDatabase对象可用于对数据库操作,包括insert,delete等等)。这两个方法的区别是:在某种特殊情况(如磁盘已满),无法对数据库进行写入操作时,getReadableDatabase() 将返回一个只读的 SQLiteDatabase 对象,而 getWritableDatabase() 将会抛出一个异常。

  2. 数据库升级
    通过实现SQLiteOpenHelper 的upgrade() 方法;

    onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

    该方法有三个参数,分别作用为:

    • db:SQliteDatabase对象
    • oldVersion: 旧的数据库版本号
    • newVersion: 新的数据库版本号

    当我们创建或需要获取的数据库版本号(也就是newVersion)大于当前系统存在的数据库的版本号(也就是oldVersion) 就会执行该方法。可在该方法内实现升级数据库的代码。根据数据库结构和数据等的差异进行数据库结构修改等。当数据库发布版本较多时,需要考虑到每一个版本的用户,所以需要对每一个版本的差异进行比较修改。

  3. 数据库降级
    通过onDowngrade()方法实现。降级与升级是相反的,onDowngrade() 同样有三个一样的参数,升级是 newVersion 大于 oldVersion 时执行,顾名思义,降级应该就是 oldVersion 大于 newVersion 时执行喽,没错 就是这样的。关于降级的设计关键:

    • 考虑云端的数据同步
    • 考虑到维护成本,可以适当的放弃一些低版本
    • 本地数据的迁移(新版本都不删除字段)
package com.example.test4Junit;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class MySQLiteOpenHelper extends SQLiteOpenHelper{

    /**
     * @param context :上下文对象,用于创建和获取数据库
     * @param name : 指定要管理的数据库名称
     * @param factory : 指定一个cursor工厂,这里可以为null,让android为我们生成cursor
     * @param version : 当前版本号,从 1 开始,用于降级或升级
     * */
    public MySQLiteOpenHelper(Context context, String name,CursorFactory factory, int version) {
        super(context, name, factory, version);
    }


    /**
     * 只在数据库第一次创建时执行。可以用来初始化表结构和添加初始数据
     * */
    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    /**
     * 数据库升级,newVersion > oldVersion 时调用
     * @param db:SQliteDatabase对象
     * @param oldVersion: 旧的数据库版本号
     * @param newVersion: 新的数据库版本号
     * 
     * */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
    /*
    * 数据库降级 oldVersion > newVersion 时调用
    */
    @Override
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值