Нужно ли вызывать 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 для небольшого большего количества обсуждения на предмете.

Другие вопросы по тегам