Base de datos SQLite de Android con Multi Threading

Estoy trabajando en una aplicación donde tengo que usar multi threading. Tengo una sola instancia de la clase de SQLiteOpenHelper a través de mi uso donde tengo métodos abrir y cerrar la base de datos y algunos métodos para insertar y traer datos.

Ahora mi problema es, abrir la base de datos en primer hilo y iniciar las transacciones al mismo tiempo Second Thread también obtener el objeto de base de datos abierta y comenzar las transacciones.

El primer hilo completa su proceso y cierra la base de datos en el otro lado mi segundo hilo está trabajando y el segundo hilo consigue que la base de datos se cierra .

Su problema lógico algunos por favor alguien me ayude a resolver este problema cómo puedo manejar el cierre de la base de datos de una manera adecuada.

Gracias por adelantado

Tengo una sola instancia de la clase de SQLiteOpenHelper a través de mi uso donde tengo métodos abrir y cerrar la base de datos y algunos métodos para insertar y traer datos.

Sólo debe cerrar la base de datos cuando haya terminado completamente con ella, como cuando la actividad o servicio que creó estos subprocesos se destruye.

Tampoco está fuera de la cuestión para usted simplemente nunca cerrar la base de datos. Si implementa un ContentProvider , nunca cerrará su base de datos. Si bien esto puede provocar advertencias en LogCat acerca de la pérdida de los identificadores de bases de datos abiertas, la naturaleza transaccional de SQLite significa que si no se cierra una base de datos no se deben producir problemas particulares (por ejemplo, no se puede liberar un búfer).

Normalmente me limitaría a mantener el SQLLite Android DB abierto y cerrarlo al final de la aplicación, sin embargo, eso no elimina el problema inicial.

He encontrado cuando el DB no está cerrado correctamente, que podría tener un problema de ser abierto en Android, por lo que el simple nunca cerrar el DB no parecía funcionar para mí.

Envolver todas las operaciones en las transacciones y los bloques del manejador de excepciones.

Tenga en cuenta que todas las transacciones deben completarse en el momento en que cerrar el DB, por lo que el método de cierre espera transacciones para completar (tengo contador de transacciones, así para esto).

A continuación, se muestra un ejemplo de bloque de transacción try catch que envuelvo todas las operaciones de DB en:

SQLPersistentStore extiende el objeto SQLiteOpenHelper getPersistentStore () {devuelve null cuando se cierra el DB}.

Anular operación pública (..) {

  SQLPersistentStore persistentStore = null; try { persistentStore = getPersistentStore(); persistentStore.beginTransaction(); ... do the DB operations persistentStore.setTransactionSuccessful(); } catch ( IllegalStateException e) { ... Log.w(... } catch (Exception e) { Log.e(TAG, ... throw new RuntimeException(e); } finally { if(persistentStore != null){ persistentStore.endTransaction(); } } 

Cuando el DB está cerrado y usted intenta una operación en él, usted consigue IllegalStateException, y ése se coge.

  • Cómo comprobar tablas de base de datos sqlite en el dispositivo?
  • ¿Cuál es la diferencia entre SQLiteOpenHelper.close () y SQLiteDatabase.close ()?
  • Cursor: declaración no válida en "fillWindow ();"
  • inicializar una base de datos sqlite android
  • Cómo obtener NoClassDefFoundError al intentar utilizar Proguard y SQLcipher en Android
  • Inserción de entradas múltiples en la base de datos SQLite android
  • El conjunto de conexiones de la base de datos '/data/data/msv_database.db' no ha podido conceder una conexión. Conexiones: 0 activo, 1 inactivo, 0 disponible
  • Columnas únicas en Sugar ORM
  • Android SQLite nueva versión de DB con una tabla eliminada
  • Almacenar valor largo en la base de datos android
  • La tabla no se creó sqlite android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.