getWritableDatabase()与getReadableDatabase()源码是一样的,唯一的区别是:在磁盘满的时候,此时数据库只允许进行读操作。getWritableDatabase()与getReadableDatabase()源码分别是
public SQLiteDatabase getWritableDatabase() {
synchronized (this) {
return getDatabaseLocked(true);
}
}
public SQLiteDatabase getReadableDatabase() {
synchronized (this) {
return getDatabaseLocked(false);
}
}
但是getReadableDatabase()先以读写方式打开,若失败,则只读
在getDatabaseLocked(boolean writable)会分别调用
public void onConfigure(SQLiteDatabase db) {}
public abstract void onCreate(SQLiteDatabase db);//创建
public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion);或 public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
throw new SQLiteException("Can't downgrade database from version " +
oldVersion + " to " + newVersion);//升级或降级
}
public void onOpen(SQLiteDatabase db) {}//在数据库被打开后调用