mam początkujących pytanie dotyczące baz danych SQLite w Androidzie:Czy muszę zadzwonić getWritableDatabase() za każdym razem manipulowanie danymi
Czy naprawdę trzeba pobrać z możliwością zapisu do bazy danych za każdym razem mogę manipulować danymi?
Więc mogę napisać DAO takiego:
class Dao {
private final SQLiteDatabase database;
public Dao(SQLiteOpenHelper databaseHelper){
database = databaseHelper.getWritableDatabase();
}
public void insert(...){
ContentValues cv = new ContentValues(4);
database.insertOrThrow(TABLE, null, cv);
...
}
public void update(...){
ContentValues cv = new ContentValues(4);
database.update(....);
}
}
czy muszę napisać DAO takiego:
class Dao {
private final SQLiteOpenHelper databaseHelper;
public Dao(SQLiteOpenHelper databaseHelper){
this.databaseHelper = databaseHelper
}
public void insert(...){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues(4);
database.insertOrThrow(TABLE, null, cv);
...
}
public void update(...){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues(4);
database.update(....);
}
}
Jeżeli drugie podejście jest poprawne: mogę również trzeba zamknąć bazę danych po każdej operacji:
public void update(...){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues(4);
database.update(....);
database.close();
}
Podejrzewam, że to samo dla databaseHelper.getReadableDatabase()
w prawo?
Nie chcę tego robić w każdym działaniu. Więc podklasuję aplikację i wprowadzę tam coś w rodzaju pojedynczego singla, aby upewnić się, że Dao (bardziej konkretny SQLiteOpenHelper) zostanie zainicjowany tylko raz – sockeqwe
@sockeqwe: Możesz go umieścić w swojej aplikacji jako statyczny, ale to ogólnie uważa się za złą praktykę . Utrudni to również działania związane z testowaniem. Ale jeśli nie dbasz o dobre praktyki lub formalne testowanie kodu, to tak, to może zadziałać. Upewnij się tylko, że żaden z twoich kodów nigdy nie zamyka połączenia; w przeciwnym razie nie będzie oczywiste, dlaczego niektóre działania nie mogą sporadycznie nawiązać połączenia. (Co jest jednym z powodów, dla których jest to zła praktyka.) –