Android数据库SQLite使用详解一 : SQLiteOpenHelper详解


   众所周知,Android使用的SQLite数据库, 其特点是高度便携、使用方便、结构紧凑、高效、可靠

   今天的目标就是在Android手机中创建一个数据库

   首先,Android 使用的是SQLiteOpenHelper类来管理数据库,来看看官方的对于此类的概述: 

   

   A helper class to manage database creation and version management.

   You create a subclass implementing onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int) and optionally onOpen(SQLiteDatabase), and this class takes care of 

opening the database if it exists, creating it if it does not, and upgrading it as necessary. Transactions are used to make sure the database is always in a sensible state.

  翻译(翻译的不好,请见谅大笑):

  SQLiteOpenHelper是一个创建数据库和管理数据库版本的的工具类

  你可以创建一个这个类的子类并实现   onCreate(SQLiteDatabase)  方法 ,    onUpgrade(SQLiteDatabase, int, int)  方法 ,  还有可选的  onOpen(SQLiteDatabase)  方法

此类会在数据库存在的时候将其打开,数据库不存在的时候创建数据库,在需要更新的时候升级数据库。这些管理用来确认数据库一直处于合理的状态

   下面介绍一下它的构造方法 SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)  和  onCreate(SQLiteDatabase)  和

  onUpgrade(SQLiteDatabase, int, int)  方法 

   1. SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)方法:

   (官方介绍)Create a helper object to create, open, and/or manage a database. This method always returns very quickly. The database is not actually created or opened until 

one of getWritableDatabase() or getReadableDatabase() is called.

   翻译: 

   创建一个用来创建,打开,管理一个数据库的工具类,这个方法运行非常快,但是,调用此方法实际上并没有创建或者打开一个数据库,当调用

getWritableDatabase() getReadableDatabase()  方法的时候才会创建或者打开一个数据库

  意思是这个方法表面上是一个构造方法,实际上也只是将此工具类初始化完毕,而不会与程序中的数据库有任何的联系

  2.onCreate(SQLiteDatabase) 方法: 

 (官方介绍) Called when the database is created for the first time. This is where the creation of tables and the initial population of the tables should happen.

  当数据库第一次创建的时候会调用此方法,这是初始创建表或者创建多个表时应该调用的方法

  需要注意的是,我们只有使用已经初始化的SQLiteOpenHelper对象的getWritableDatabase()  或者getReadableDatabase()的时候才会调用这个

onCreate(SQLiteDatabase)方法,所以,这个方法需要实现数据库中创建表的操作

   3.  onUpgrade(SQLiteDatabase, int, int)  方法: 

   (官方介绍)Called when the database needs to be upgraded. The implementation should use this method to drop tables, add tables, or do anything else it needs to upgrade 

to the new schema version.

   当数据库版本需要更新的时候会调用此方法,实现此方法来删除表,添加表或者做其他任何事情来使旧版本数据库更新成最新版本


   下面是一个示例:此类继承了SQLiteOpenHelper抽象类,并实现了onCreate(SQLiteDatabase) 和 onUpgrade(SQLiteDatabase, int, int) 方法

    此示例是Android创建一个学生数据库管理程序的 SQLiteOpenHelper 部分,具体的实现我会在下一节课中写出来

   

/**
 * <p/>
 * SQLiteOpenHelper用于创建和管理数据库以及版本,需要创建一个子类继承,该类封装了对数据库操作的基本方法,使用方便。
 * <p/>
 * 此类即是对特定数据库进行封装的类,
 */
public class SqLiteHelper extends SQLiteOpenHelper {

    Context context;


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

        this.context = context;

        Log.i(StuDataBaseController.DBName,"执行了SqLiteHelper的初始化方法");

    }

    //调用此类的getReadableDatabase或getWritableDatabase时,
    //会判断是否有指定数据库存在,如果没有,则调用此onCreate方法
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {

        Log.i(StuDataBaseController.DBName,"执行了SqLiteHelper的onCreate方法");

        //创建学生表
        sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS " +
                StuModel.StuDataBaseName   +
                " ( " + StuModel.StuId +
                " integer primary key," +
                StuModel.StuName +
                " VarChar(50)," +
                StuModel.StuAge +
                " integer" + " );");

    }


    //更新表的时候会调用,一般用于不同版本的软件更新数据库的时候使用

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {

      sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + StuModel.StuDataBaseName);


      onCreate(sqLiteDatabase);


    }
}

   下一篇的链接为   Android数据库SQLite使用详解二 : 学生管理系统的简单实现

  


  

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值