to zależy czy używasz właściwości klasy pomocniczej SQLiteOpenHelper jeżeli tak to używasz getWritableDatabase wtedy są wykonywane metody należące do klasy SQLiteOpenHelper dzięki który możesz w czytelny sposób utworzyć tabele itd.. ale jeżeli sam chcesz wszytko robić to równie dobrze możesz użyć
SQLiteDatabase.openOrCreateDatabase()
lub
SQLiteDatabase.openDatabase()
sądzę ze książce jest wersja z użyciem SQLiteOpenHelper
getWritableDatabase i tak korzysta z metody openDatabase więc to wszystko zależy jak skonstruujesz klasę
przykład różnicy:
nie stosując SQLiteOpenHelper trzeba np: samemu zadbać o aktualizacje bazy na wypadek zmiany struktury
public class Database {
private SQLiteDatabase mDatabase = null;
public void openDatabase(String path) {
mDatabase = SQLiteDatabase.openOrCreateDatabase(path, null);
}
public SQLiteDatabase getDatabase() {
return mDatabase;
}
public void closeDatabase() {
mDatabase.close();
}
}
oraz stosując SQLiteOpenHelper
public class Database extends SQLiteOpenHelper {
private SQLiteDatabase mDatabase = null;
@Override
public void onCreate(SQLiteDatabase mDatabase) {
}
@Override
public void onUpgrade(SQLiteDatabase mDatabase, int oldVersion, int newVersion) {
}
public void openDatabase() {
mDatabase = getWritableDatabase();
}
public SQLiteDatabase getDatabase() {
return mDatabase;
}
public void closeDatabase() {
mDatabase.close();
}
}
jak widać różnica jest jedynie w dwóch metodach które dostarcza klasa rozszerzana, oczywiście to jest jedynie prosty przykład