2011-07-15 19 views
6

Esto es más un tipo de pregunta "¿Lo estoy haciendo de la mejor manera?" Con respecto al cierre de la conexión a una base de datos sqlite. Lo que he estado haciendo es cerrar la base de datos dentro de mi actividad de vista en los métodos onpause y ondestroy. Cuando el usuario navega de regreso a la actividad, vuelvo a consultar la base de datos en el método onresume. Aquí es un fragmento de código:Android: cierre de la base de datos SQLite

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(); 
} 

Por supuesto, esto no es toda la actividad, sino simplemente las partes que tienen que ver con la base de datos SQLite. Entonces, ¿estoy haciendo esto de una manera ordenada o hay una mejor práctica que debería seguir?

Respuesta

6

onDestroy es probablemente el mejor método de disposición de fase para colocar cualquier conexión IO.

Otro enfoque es el uso del patrón try { query() } finally { db.close(); }, que también tiene sentido para que la base de datos solo se active durante la consulta.

En Java 7, hay un nuevo azúcar sintáctico try (db = open database();) { execute queries(); } que cierra la base de datos automáticamente después de finalizar las consultas. Sin embargo, Java 7 aún no está disponible en dispositivos Android.

+0

Me gusta la idea de probar/finalmente. Tendré que jugar con eso, gracias. – ryandlf

Cuestiones relacionadas