文件
- 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) {
//暂时不需要数据库版本变更操作
}
}