Lectura de transacciones no confirmadas en Android
Tengo operaciones de base de datos de operaciones pesadas, que añade alrededor de 10.000 registros a mi base de datos. Dado que esto podría tomar un tiempo muy largo, sería mejor utilizar las transacciones.
db.startTransaction(); .... do write operations. .... db.setTransactionSuccessful(); db.endTransaction();
Ahora, tengo algunas operaciones de lectura dentro de las transacciones, y ya que las inserciones no se cometen hasta endTransaction, esos registros no se obtienen. He oído hablar de algo llamado niveles de aislamiento de transacción, que nos permite leer registros sucios (no confirmados) también. ¿Alguna idea de cómo hacer esto?
- Cambio de valores desde Cursor mediante SimpleCursorAdapter
- Sqlite android extraer contactos con número de teléfono
- Lea el error de la carpeta sqlite from assets
- Android cursorwindow error de memoria en un fragmento específico
- Depurando ExpandableListView de la base de datos - no funciona
- Android usando SQLCipher - ¿cómo se puede descifrar?
- La concurrencia de webview de Android causó SQLiteException: la base de datos está bloqueada
- Cómo implementar Exportar sqlite Para sobresalir / archivo csv en android?
- ¿Cuál es la mejor estrategia de clave primaria para una aplicación móvil en línea / offline multi-cliente con base de datos SQLite y Azure SQL como almacén central?
- Cómo incrustar una fuente personalizada en la aplicación de Android (WebView)
- ¿Cómo puedo crear una base de datos SQLite en Android mediante la importación de un archivo SQL?
- Android sqlite lee todas las filas a la vez
- Android - SQLite - SELECCIONAR ENTRE Fecha1 Y Fecha2
Yo aconsejaría llamar a la instrucción SQL SQLite pragma:
database.execSQL("PRAGMA read_uncommitted = true;");
Esta sentencia dice que las consultas utilizarán nivel de aislamiento de transacción READ_UNCOMMITTED en lugar de READ_SERIALIZABLE (modo predeterminado de SQLite).
Mira por ejemplo aquí
¿Has probado esto
// outer transaction db.startTransaction(); .... //roll out a new transaction db.startTransaction(); .... do write operations. .... db.setTransactionSuccessful();// <-- you do commint inside of this transaction // you can read data from here on from the previous committed transaction .... db.setTransactionSuccessful(); db.endTransaction();
Encontré que por defecto usted podrá leer los expedientes que están todavía para ser confiados. Aunque esto falla si está utilizando SQliteOpenHelper
. Esto se debe a que SQliteOpenHelper
proporciona 2 SQliteOpenHelper
separadas manejadas (de lectura y escritura) y no confirmadas, que no estarán disponibles para su lectura desde el otro identificador. Por lo tanto, si desea leer registros no SQLiteDatabase
, utilice la clase SQLiteDatabase
.
- Cambiar la listaVer el color seleccionado en Android
- ¿Cómo recortar una imagen cuyo URI se conoce en Android?