【SQLite数据库小结】你不得不知的类SQLiteOpenHelper

引言

  • 如果你想要新建一个数据库,那么你一定会用到SQLiteOpenHelper;
  • 如果你已经有了数据库,但是你想要操作数据库里面表中的数据,进行CRUD操作,那么你一定会用到SQLiteOpenHelper;
  • 如果你已经有了数据库,但是想要升级数据库,改变数据库中表的结构,那么你一定会用到SQLiteOpenHelper……

总之,凡是你想要在程序里面对数据库进行相关操作(CRUD等)都必须通过SQLiteOpenHelper。


正文
在使用前,你必须知道的知识点:
1.SQLiteOpenHelper是抽象类,意味着要使用的话必须创建一个自己的类去继承它(这也是抽象类存在的意义),并且实现两个抽象方法:

  • onCreate():在这里写创建数据库的语句。
  • onUpgrade():在这里实现升级数据库的逻辑。

tips:两个方法中参数均包含了SQLiteDatabase引用.

2.在SQLiteOpenHelper的构造函数里指定你要创建或者访问的数据库名,数据库版本号(升级数据库用)。构造函数有两个,一般用参数少的那个即可。其中重要的两个参数就是上面所述.

3.SQLiteOpenHelper中有两个重要的实例方法getReadableDatebase()和getWritableDatabase(),除了数据库不可写入的情况,其他情况下二者相同,都能得到对数据库操作对象(数据库对应SQLiteOpenHelper中参数传入的那个).

  • getReadableDatebase()

  • getWritableDatabase()

4.onCreate()方法和onUpgrade()方法不是由程序员直接调度的(虽然你直接调度貌似也可以,但是不是这么用的),而是虚拟机调度的,所以要知道这两个方法的调度时机.

  • onCreate(): 程序员调用getWitableDatabase(或者getReadableDatabase)且本地还没有对应的数据库(2个条件).
  • onUpgrade():程序员调用getWitableDatabase(或者getReadableDatabase)且本地已经有对应的数据库但是版本低于新版本,版本号在SQLiteOpenHelper的构造函数参数里设置(三个条件).

代码示例:

/*1.写一个类继承SQLiteOpenHelper*/
    package com.sunday.goodhobby.goodhobby.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

/**
 * Created by Administrator on 2016/7/21.
 */
public class MyDBHelper extends SQLiteOpenHelper{
    //上下文实例
    private final Context mCtx;
    //这是要执行的sql语句,一般都是建表语句
    public static final String create_hobby="create table hobby("+"id integer primary key autoincrement,"+"name text,"+"grade text)";

    //在构造函数传入数据库名和数据库版本号
    private MyDBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mCtx=context;
    }

    @Override
    public void onCreate(SQLiteDatabase db ) {
    //执行sql语句,无论是开发阶段还是产品已经成熟阶段,这里都是写建表语句;而且这里应该用当前最新的数据库结构来建表
       db.execSQL(create_hobby);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
       //开发阶段的做法是:将原来的表全部删除,执行onCreate方法;正确的做法是:根据原来的版本,赋予每个数据库版本各自的内容(用switch语句,case后面无break)
}
/*2.创建对象*/ 
/*3.调用SQLiteOpenHelper的get方法的到操作数据库的实例*/
/*4.用数据库操作实例执行想要执行的sql语句*/

总结:
宏观上使用顺序:
新建类继承SQLiteOpenHelper-> 创建对象SQLiteOpenHelper(在此传入数据库名,版本号)->调用getWritableDatabase方法得到SQLiteDataBase对象->通过SQLiteDataBase对象执行sql语句.


延伸思考:
1. 一个app中SQLiteOpenHelper实例有必要需要多个吗?其实在一个app中只需要单个实例就足够了,所以应该将SQLiteOpenHelper写成SINGELTON模式.
2. 一个app是怎么实现升级的(如何提醒用户升级,使用什么方式升级,是将旧版本删除再下载新版本安装还是增量升级,只更新改变的那一部分,怎么实现)


友情提醒:要深入全面的学习请看官方的帮助文档,新手入门推荐书籍
<第一行代码>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值