android - una - sqliteopenhelper
¿Debo llamar a getWritableDatabase() cada vez que manipulo datos? (1)
Tengo una pregunta para novatos sobre las bases de datos sqlite en Android:
¿Realmente necesito recuperar una base de datos escribible cada vez que manipulo datos?
Entonces, ¿puedo escribir un DAO como este?
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(....);
}
}
o debo escribir mi dao así:
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(....);
}
}
Si el segundo enfoque es el correcto: ¿también necesito cerrar la base de datos después de cada operación?
public void update(...){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues(4);
database.update(....);
database.close();
}
Supongo que es el mismo para databaseHelper.getReadableDatabase()
¿verdad?
Debe cerrar cada cursor que abra. Pero la instancia de la base de datos no necesita cerrarse después de cada uso.
Normalmente onCreate()
una base de datos grabable en onCreate()
y SQLiteDatabase
la SQLiteDatabase
resultante como una variable miembro para cada actividad, y nunca cierro explícitamente esa instancia. (Pero, de nuevo, cierro todos los cursores tan pronto como termine de procesar sus resultados).
Consulte Administración de conexiones SQLite en Android para obtener más información sobre el tema.