2011-03-01 13 views
18

Tengo (con suerte) una pregunta rápida sobre el manejo de las conexiones de bases de datos SQLite en Android. Tengo una aplicación que está compuesta, naturalmente, de varias actividades. No tengo problemas para crear/actualizar/consultar la base de datos, ya que he creado una sola clase dedicada para manejar ese trabajo a través de SQLiteOpenHelper, etc.Administración de conexiones de SQLite en Android

Mi pregunta es esta: ya que todas estas actividades comparten esta misma base de datos, esto generalmente se implementa como un miembro único, estático, o debe cada actividad poseer su propia conexión? Mi preocupación, por supuesto, es el costo de volver a conectarse a la base de datos en cada actividad.

O, dicho de otra manera, ¿hay alguna razón para no almacenar solo una instancia de singleton?

También me pregunto si hay algo detrás de escena similar a .NET's connection pooling para reducir el costo de apertura de conexiones.

¡Gracias de antemano!

Respuesta

13

La apertura de la conexión en SQLite es de aproximadamente 0,2 ms.

La mejor práctica nos dice que debemos abrir y cerrar la conexión cada vez que la necesitamos.

+0

Gracias! A veces, encontrar una mejor práctica "oficial" es un desafío. –

9

Solo use SQLiteOpenHelper.getReadableDatabase() y SQLiteOpenHelper.getWriteableDatabase() - Android administrará y guardará la conexión en caché, por lo que no es necesario.

De hecho, consulte la documentación oficial de Google Using Databases:

Para escribir y leer desde la base de datos , llame getWritableDatabase() y getReadableDatabase(), respectivamente. Ambos devuelven un SQLiteDatabase

+0

Gracias por la respuesta @RivieraKid. Los documentos oficiales no entraron en muchos detalles en cuanto a los gastos de apertura de las conexiones, que es donde iba con la pregunta. Saber que hay medidas tras bambalinas para administrar/reutilizar las conexiones, y que hay un costo aceptable de llamar a esos métodos cuando los necesito (en lugar de aferrarme al objeto de la base de datos devuelto) me ayuda enormemente. –

+1

¿Pero debería cerrar la base de datos SQLiteData cada vez que llamo a esas funciones? Tengo una SQLiteDatabase con muchas funciones pequeñas, cada una de ellas llama a una de las "getXXXDatabase". ¿Debo cerrar la base de datos al final de cada método? ¿No perderé las ventajas de la memoria caché? ¿O Android lo conserva de todos modos? –