Android: закрытие базы данных SQLite - PullRequest
6 голосов
/ 15 июля 2011

Это скорее вопрос типа «делаю ли я это наилучшим образом» в отношении закрытия соединения с базой данных sqlite.То, что я делал, это закрытие базы данных в рамках моих действий просмотра в методах onpause и ondestroy.Когда пользователь возвращается к действию, я запрашиваю базу данных по методу onresume.Вот фрагмент кода:

private void setupView() {

    newRecipeButton = (Button)findViewById(R.id.NewRecipeButton);
    newRecipeButton.setOnClickListener(addNewRecipe);

    list = (ListView)findViewById(R.id.RecipeList);
    dbHelper = new DataBaseHelper(this);
    setupDataBase();
    database = dbHelper.getMyDataBase();
    queryDataBase();
    list.setEmptyView(findViewById(R.id.EmptyList));
    registerForContextMenu(list);
}

private void queryDataBase() {
    data = database.query("recipes", fields, null, null, null, null, null);
    dataSource = new DataBaseAdapter(this, R.layout.recipe_list_item, data, fields, new int[] {R.id.RecipeName, R.id.RecipeStyle});
    list.setAdapter(dataSource);
}

private void setupDataBase() {
    //Create the database if this is the first run.
    try{
        dbHelper.createDataBase();
    } catch(IOException e){
        throw new Error("Unable to Create Database");
    }

    //Otherwise open the database.
    try{
        dbHelper.openDataBase();
    }catch (SQLiteException e){
        throw e;
    }
}

@Override
protected void onResume(){
    super.onResume();
    setupView();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    dbHelper.close();
}

Конечно, это не вся деятельность, а только части, которые имеют дело с базой данных sqlite.Так я делаю это аккуратно или есть лучшая практика, которой я должен следовать?

1 Ответ

6 голосов
/ 15 июля 2011

onDestroy, вероятно, является наилучшим методом размещения любого соединения ввода-вывода.

Другой подход - использование шаблона try { query() } finally { db.close(); }, который также имеет смысл, так что база данных активируется только во время вашего запроса.

В Java 7 появился новый синтаксический сахар try (db = open database();) { execute queries(); }, который автоматически закрывает базу данных после завершения выполнения запросов. Однако Java 7 пока недоступна на устройствах Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...