¿Es Sqlite Database thread de instancia seguro

Tengo una base de datos con algunas tablas. Quiero actualizar las tablas utilizando múltiples subprocesos. Utilizaré la misma instancia de SQLiteDatabase en todos los subprocesos.

Por favor sugiera si este enfoque es correcto. ¿Es la base de datos Sqlite threadsafe? ¿Pueden dos hilos diferentes actualizar la misma tabla para diferentes conjuntos de valores al mismo tiempo.

[ERROR:] No, no es thread-safe de forma predeterminada. Debe utilizar métodos SQLiteHelper relacionados con el bloqueo para proporcionar seguridad en los subprocesos.

[EDIT]: La clase SQLiteDatabase proporciona un mecanismo de bloqueo de forma predeterminada (ver comentarios) y si está ejecutando multithread, no tiene que considerar cambiar nada para que tenga seguridad de subprocesos.

Buscar "hilo" en este documento: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

Y lea más sobre:

El Android utiliza java mecanismo de bloqueo para mantener el acceso a la base de datos SQLite serializado. Por lo tanto, si el subproceso múltiple tiene una instancia de DB, siempre llama a la base de datos en forma serializada y, por supuesto, la base de datos es segura para subprocesos .

Si confirmamos que estamos utilizando la base de datos de un solo hilo, tuvimos la opción de establecer la base de datos de bloqueo interno desactivar mediante la llamada a setLockingEnable(false) pero este método obtuvo obsoleto de API nivel 16 y ya no en uso. Si ve la implementación de este método en la clase SQLiteDatabase , no encontrará nada escrito allí, es decir, método vacío.

 public void setLockingEnabled (boolean lockingEnabled) 

Este método ahora no hace nada. No utilice.

Una cosa que debemos cuidar de que es que debemos hacer una instancia de su clase de ayuda (es decir, haciendo singleton) y compartir la misma instancia a múltiples hilos y no llamar close() en la base de datos entre la operación, de lo contrario puede obtener Siguientes excepciones:

java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase

Por lo tanto, no llame a database.close() entre el acceso a la base de datos, base de datos de auto realizar una operación de cierre interno cuando toda la operación sería terminar.

Puede controlar si la base de datos es segura o no de hilos por setLockingEnabled .

Controlar si el SQLiteDatabase se hace o no thread-safe utilizando cerraduras alrededor de secciones críticas. Esto es bastante caro, por lo que si sabe que su base de datos sólo se utilizará por un solo hilo, entonces debe establecer esto en falso. El defecto es cierto

Así que creo que esto responde a su pregunta.

El método setLockingEnabled se deprecia en el nivel API 16

Si lo haces

SetLockingEnabled (boolean lockingEnabled) Controla si SQLiteDatabase se hace o no thread-safe usando cerraduras alrededor de secciones críticas.

  • ¿Se trata de una consulta SQLite válida?
  • ¿Puedo bloquear una tabla SQLite para el subproceso actual?
  • La forma más rápida y rápida de obtener nuevos mensajes sms al iniciar la aplicación - Android
  • Android - SQLite Cursor getColumnIndex () es sensible a mayúsculas y minúsculas?
  • Entender el campo de incremento automático de Android de sqlite
  • Cómo escapar caracteres especiales como 'en sqlite en android
  • Net.sqlcipher.database.SQLiteException: no es un error:
  • Problema de orden de consultas SQLite de Android
  • Inspeccionar android sqlite y IntelliJ
  • Error al azar de SQLiteConnectionPool en Android. ¿Como evitar?
  • Comprobación de consultas de Sqlite - menor y mayor que
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.