2011-07-06 10 views
19

Estoy creando una clase de ayuda de base de datos y para algunos de los métodos dentro de ella solo estoy consultando la base de datos y otras que le estoy escribiendo.getWritableDatabase() VS getReadableDatabase()

Mi comprensión es que estos dos métodos abrirán la base de datos y dejarán que el programa simplemente lea o escriba en la base de datos.

Para las declaraciones de consulta vale la pena simplemente usar getReadableDatabase() o hay muy poca diferencia en el rendimiento entre los dos métodos.

Gracias por su tiempo.

+0

http://stackoverflow.com/questions/10844578/difference-between-getwritabledatabase-and-getdadabledatabase – user2864740

+0

https://youtu.be/jBjSb70yOMk –

Respuesta

17

Devuelven el mismo objeto a menos que el disco esté lleno o haya algún error de permiso que obligue a abrir la base de datos en modo de solo lectura. El nombre es un poco confuso :)

Como regla general, debe poner cualquier llamada a estos métodos fuera del subproceso de interfaz de usuario. Ambos pueden tardar mucho tiempo en regresar.

Si no va a escribir la base de datos solo use getReadableDatabase ya que contribuirá a la claridad y la intención de su código.

Más información here.

+0

Entonces, ¿puedo ejecutar sentencias selectas incluso si uso 'getWritableDataBase'? –

-2

Abrir una base de datos de solo lectura debería mejorar ligeramente el rendimiento, ya que la sobrecarga de bloqueo será menor.

+4

Esto no es realmente cierto. La llamada a getReadableDatabase devolverá un objeto de base de datos modificable la mayor parte del tiempo, a menos que el disco esté lleno o haya errores de permiso. – mgv

+2

Así que, básicamente, no hay diferencias en el rendimiento y el uso entre ambos métodos. gracias –

+1

@JamesDudley Excepto que getReadableDatabase * no * tiene que devolver una base de datos escribible. – user2864740

0

Si obtiene 'La base de datos está bloqueada' escriba errores al implementar llamadas de db concurrentes (multi-hilo), use getWritableDatabase en lugar de getReadableDatabase.

1

Si realiza demasiadas operaciones en la base de datos como consultas, actualizando frecuentemente en algún orden aleatorio, entonces realmente no tiene ningún sentido utilizar la base de datos getReadable, ya que solo se puede usar para leer los valores.

Según el requisito de su aplicación, puede juzgar el uso. Si solo está leyendo los valores constantemente, puede buscar la base de datos getreadable.

Nota: Algunas veces cuando intenta abrir una base de datos para escritura, usando getwritabledatabase y si el sistema encuentra una excepción como permiso de escritura, en ese caso el sistema puede arrojar una excepción. En tales casos, puede abrir la base de datos usando getdadabledatabase.

2

Si mira NotepadProvider.java en el proyecto de ejemplo NotePad de Google, verá que usan ambos, dependiendo del caso de uso.

Cuestiones relacionadas