Нужно ли вызывать getWritableDatabase() каждый раз, когда я манипулирую данными
У меня есть вопрос новичка о базах данных sqlite в Android:
Действительно ли мне нужно извлекать доступную для записи базу данных каждый раз, когда я манипулирую данными?
Так что я могу написать DAO, как это:
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(....);
}
}
или я должен написать свой дао так:
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(....);
}
}
Если второй подход правильный: нужно ли мне также закрывать базу данных после каждой операции:
public void update(...){
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues(4);
database.update(....);
database.close();
}
Я думаю, то же самое для databaseHelper.getReadableDatabase()
право?
1 ответ
Вы должны закрыть каждый курсор, который вы открываете. Но экземпляр базы данных не нужно закрывать после каждого использования.
Я обычно получаю доступную для записи базу данных в onCreate()
и сохранить полученный SQLiteDatabase
в качестве переменной-члена для каждого действия, и никогда не закрывайте этот экземпляр явно. (Но опять же, я закрываю каждый курсор, как только закончу обработку их результатов.)
Посмотрите Управление Соединениями SQLite в Android для небольшого большего количества обсуждения на предмете.