SQLiteOpenHelper 介绍

package com.cnfol.sqlitedb;

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

 /*
        为了判断数据库是否包含news_inf数据表,采用的
    方法十分烦锁:程序先尝试向news_inf数据表中插入记录,如果程序
    抛出异常,在异常中捕获的catch块中创建news_inf数据表,然后再
    插入记录。
       那到底是否有一种更优雅的方式来处理这种问题呢?
    有,Android提供了SQLiteOpenHelper类来处理这个问题。

       实际项目中很少用SQLiteDatabase的方法来打开数据库,
    通常都是会继承SQLiteOpenHelper开发子类,并通过该类的
    getReadableDatabale(),getWriteableDatabase()
    方法打开数据库。
    

        SQLiteOpenHelper是Android提供的一个管理数据库的工具类
    可用于管理数据库的创建和版本更新。一般的用法是创建SQLiteOpenHelper
    的子类,并扩展它的onCreate(SQLiteDatabase db)和
    onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)方法
    */


public class SQLiteOpenHelper extends android.database.sqlite.SQLiteOpenHelper{

    public SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    /**
     * 以读写的方式打开数据库对应的SQLiteDatabase对象
     * @return
     */
    @Override
    public SQLiteDatabase getReadableDatabase() {
        return super.getReadableDatabase();
    }

    /**
     *以写的方式打开数据库对应的SQLiteDatabase对象
     * @return
     */
    @Override
    public SQLiteDatabase getWritableDatabase() {
        return super.getWritableDatabase();
    }

    /**
     * 当第一次创建数据库时回调该方法
     *
     * 用于初次使用软件时生成数据库表,当调用SQLiteOpenHelper的
     * getWritableDatabase()或者getReadableDatabase()方法
     * 获取用于操作数据库的SQLiteDatabase实例时,如果数据库不存在,
     * Android系统会自动生成一个数据库,接着调用onCreate()方法,
     * onCreate()方法在初次生成数据库时才会被调用,重写onCreate()
     * 方法时,可以生成数据库表结构及添加一些应用使用到的初始化数据
     *
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    /**
     * 当数据库版本更新时回调该方法
     *
     * 用于升级软件时更新数据库表结构,方法在数据库的版本发生改变时
     * 会被调用,该方法调用时oldVersion代表数据库之前的版本号,
     * newVersion代表当前数据库当前的版本号。
     *
     * 那么在那里指定数据库的版本号呢?当程序创建SQLiteOpenHelper对象
     * 时,必须指定一个version参数,该参数就决定了使用的数据库的版本--
     * 也就是说,数据库的版本是由程序员控制的。只要某次创建SQLiteOpenHelper
     * 时指定的数据库版本号高于之前指定的版本号,系统就会自动触发onUpgrade()
     * 方法里面根据原版号和目标版本号进行判断,即可根据版本号进行必需的表结构
     * 更新。
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    /**
     * 关闭所有打开的SQLiteDatabase.
     */
    @Override
    public synchronized void close() {
        super.close();
    }

    /**
     * 从上面方法介绍中不难看出,SQLiteOpenHelper提供了getReadableDatabase()、
     * getWritableDatabase()两个方法用于打开数据库连接,并提供了close方法来
     * 关闭数据库连接,而开发者需要做的就是重写它的两个抽象方法。
     */


    /**
     * 提示:
     *    实际上,当应用程序升级表结构时,完全可能因为已有数据库导致
     * 升级失败。在这种时候程序可能需要先对数据进行转储,清空数据表中
     * 的记录,接着对数据表进行更新,当数据表更新完成后再将数据保存会来。
     */

    /**
     * 一旦得到了SQLiteOpenHelper对象之后,程序无须使用SQLiteDatabase
     * 的静态方法创建SQLiteDatabase实例,而且可以使用getWritableDatabase()
     * 或getReadableDatabase()方法来获取一个用于操作数据库的SQLiteDatabase
     * 实例。
     *
     * 其中getWritableDatabase()方法以读写方式打开数据库,一旦数据库的磁盘
     * 空间满了,数据库就只能读而不能写,倘若使用getWritableDatabase()打开
     * 数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,
     * 如果数据库的磁盘空间满了,就会打开失败,当打开失败后继续尝试以只读方式打开
     * 数据库。
     */


}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值