Android: Закрытие Базы Данных SQLite
это скорее вопрос "я делаю это наилучшим образом" в отношении закрытия соединения с базой данных 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 ответов
onDestroy
вероятно, лучший этап для размещения метода удаления любого соединения ввода-вывода.
другой подход использует try { query() } finally { db.close(); }
pattern - что также имеет смысл, так что база данных активируется только во время вашего запроса.
в Java 7 появился новый синтаксический сахар try (db = open database();) { execute queries(); }
который автоматически закрывает базу данных после завершения выполнения запросов. Однако Java 7 пока недоступна на устройствах Android.