目录
SQLite是Android系统内置的轻量级关系型数据库。
一、创建数据库
数据库的管理类SQLiteOpenHelper,SQLiteOpenHelper可以对数据库进行创建和升级,它是一个抽象类,有两个抽象方法onCreate、onUpgrade。抽象类我们无法直接使用,需要新建一个类继承它。
从最少参数的构造方法可以看出,至少我们需要传入4个参数:
1、context:上下文;
2、name:数据库名字;
3、factory:自定义游标,一般传入null即可;
4、version:数据库的版本号,用于数据库升级;
两个抽象方法:
1、onCreate(SQLiteDatabase db):创建数据库时执行,可做创建数据表的逻辑;
2、onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion):实现数据库的升级逻辑;
创建数据表的建表语句固定,使用的类似SQL语句,可直接设置成常量:
private static final String CREATE_BOOK = "create table Book ("
+ "id integer primary key autoincrement, "
+ "author text, "
+ "price real, "
+ "pages integer, "
+ "name text)";
integer:整型;
real:浮点型;
text:文本类型;
blob:二进制类型;
primary key:表示设为主键;
autoincrement:表示id列自增。
执行SQL语句:db.execSQL(CREATE_BOOK);
继承SQLiteOpenHelper的MyDatabaseHelper实现如下:
public class MyDatabaseHelper extends SQLiteOpenHelper{
private static final String CREATE_BOOK = "create table Book ("
+ "id integer primary key autoincrement, "
+ "author text, "
+ "price real, "
+ "pages integer, "
+ "name text)";
private Context mContext;
public MyDatabaseHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
}
我们的MyDatabaseHelper类创建好了,但这个时候还不会创建数据库 ,因为还没有执行者。要创建数据库,首先我们需要一个MyDatabaseHelper对象:
MyDatabaseHelper dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);
SQLiteOpenHelper类给我们提供了两个方法,可以用来创建数据库
1、getWritableDatabase()
从方法的实现看,已经加synchronized实现了线程同步,最后调用getDatabaseLocked(true),传入参数true。
此方法的解释较长,大概意思是,此方法创建并/或打开一个数据库用于读写,第一次调用的时候onCreate将被调用。当不再使用此数据库应该调用close方法关掉;错误的权限或磁盘已满会导致方法调用失败;upgrade数据库升级可能花费的时间比较长,所以不能再主线程中调用,包括ContentProvider的onCreate()方法。直到close方法调用之前,getWritableDatabase方法会返回一个读写的数据库对象。
/**
* Create and/or open a database that will be used for reading and writing.
* The first time this is called, the database will be opened and
* {@lin