文件

  • Db.java

  • com.hzj163.mysqlitedb.db

  • Db

继承android.database.sqlite.SQLiteOpenHelper

  • 在android中创建数据库必须继承SQLiteOpenHelper

  • 必须实现构造方法,传递几个参数给SQLiteOpenHelper父类

属性【必须给父类的参数做成属性】

  • 做成属性的目的是为了在DB类中修改属性,一般做三个属性

    • static String name 数据库名称

    • static SQLiteDatabase.CursorFactory factory 游标工厂,一般为null

    • static int version 数据库版本号

  • 如果需要外界修改版本或者数据库名称,就给出getxx和setxx,本项目不需要,所以不给

构造【必须调用父类构造】

  • 由于必须调用父类的构造,那么子类也必须要写构造方法,不能是空的构造方法

  • 必须要调用的构造方法为

    • public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version)
  • 这里就可以使用三个静态属性,把参数传递给父类构造

  • 本类构造还需要传递一个上下文,所以上下文参数做成本类构造方法的唯一参数

方法

  • 必须重写的方法

    • public void onCreate(SQLiteDatabase db) 该方法当应用没有数据库的时候调用一次,有了就不调用了,因此该方法是创建数据库和初始化数据库的地方,参数db为SQLiteDatabase对象,该对象主要操作数据库的

    • public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)当数据库版本变更的时候运行,只有修改了static int version这个属性,才会变更数据库版本

该类的创建数据库的时机

  • 只要第一次运行Db对象的getReadableDatabase()或者getWritableDatabase()方法就会立即创建数据库,回调执行onCreate方法,但是下次再调用getReadableDatabase()或者getWritableDatabase()方法将不再回调执行onCreate方法。

该类的作用

  • 该类就是为了运行getReadableDatabase()或者getWritableDatabase()方法获取SQLiteDatabase对象的,然后使用SQLiteDatabase对象对数据表进行操作

package com.hzj163.mysqlitedb.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.text.format.DateFormat;
import java.util.Date;
/**
 * 作者: 黄志江老师 on 2015/9/21.
 * 网址: www.hzj163.com
 * 网书: https://www.gitbook.com/@hzj163
 * 邮箱: [email protected]
 */
//SQLiteOpenHelper用于创建数据库
//SQLiteDatabase用于操作数据库
public class DB extends SQLiteOpenHelper {
    //必须创建构造方法
    //数据库名
    static String name = "note.db";
    //游标工厂
    static SQLiteDatabase.CursorFactory factory = null;
    //数据库版本
    static int version = 1;

    public DB(Context context) {
        //必须调用的父类构造方法
        super(context, name, factory, version);
    }

    //必须重写【如果数据库存储则不允许,否则运行,用于创建数据库】
    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建数据库SQL语句
        db.execSQL("CREATE TABLE [note] (\n" +
                "  [id] INTEGER PRIMARY KEY AUTOINCREMENT, \n" +
                "  [info] TEXT, \n" +
                "  [st] VARCHAR(50));");
        //你还可以添加一些初始数据
        String temp=DateFormat.format("yyyy-MM-dd HH:mm:ss", new Date().getTime()).toString();
        db.execSQL("insert into note (info,st) values('欢迎使用便签APP', '"+temp+"')");
    }
    //必须重写【如果有数据库版本变更才会执行】
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //暂时不需要数据库版本变更操作
    }
}