¿Puedo bloquear una tabla SQLite para el subproceso actual?
Mi aplicación gestiona todos sus datos en un SQLiteDatabase al que se accede mediante un número de subprocesos.
En este momento he estado manteniendo todas mis llamadas de base de datos sincronizadas en la propia base de datos.
- SQLiteDatabase.insertOrThrow no se lanza pero no se insertan datos
- Multi claves primarias en Android SQLite
- Cómo obtener la fecha MAX en SQLite
- implementar el marco de sincronización de Microsoft con el dispositivo Android
- Android cómo actualizar, pero conserva la información de la base de datos
La razón por la que quiero hacer esto es que de vez en cuando quiero actualizar la tabla mediante la captura de la versión más reciente de un servidor y la reconstrucción de la tabla de stratch. Para ahorrar tiempo en realidad estoy haciendo una segunda tabla y luego reemplazar el original cuando estoy hecho (bloqueo con una sincronización mientras estoy haciendo esto).
El problema es que de vez en cuando tengo mis llamadas SQL callar durante un largo tiempo (debido a los bloqueos síncronos) o me sale un error cuando una llamada SQL intenta ejecutarse en el breve período cuando mi tabla se está copiando.
¿Hay una era para mí para bloquear mi base de datos de otras operaciones mientras se actualiza, pero dejar que las operaciones A, B, C, etc correr simultáneamente?
¡Aclamaciones!
- Crear la función definida por el usuario en sqlite android?
- Base de datos no visible en la carpeta DDMS cuando se utiliza el dispositivo real en lugar del emulador
- Restricción única del reino en varios campos
- Android insertWithOnConflict devolviendo el valor equivocado
- ¿Cómo portar un MS Access existente a SQLite para su uso con el desarrollo de aplicaciones para Android?
- Android sqlite - Cómo administrar un valor entero en la cláusula where
- ¿Cuál es la sintaxis de "no igual" en SQLite?
- Android SQLite ORDER BY no funciona
Estoy bastante seguro de lo que quieres es un ReadWriteLock . Básicamente, pone dos cerraduras diferentes en su base de datos, una para leer y otra para escribir. Mientras que el bloqueo de escritura está bloqueado, nadie más puede leer o escribir. Si alguno de los bloqueos de lectura está bloqueado (por cualquier número de subprocesos), el bloqueo de escritura no podrá bloquearse hasta que todos hayan terminado de leer.