En mi aplicación de Android, hay dos procesos, digamos el proceso A y B
Es curioso que si el proceso A intenta acceder a la base de datos sqlite, todo está bien. Sin embargo, si el proceso B lo hace, se mostrará la siguiente excepción
android.database.sqlite.SQLiteException: no se puede abrir el archivo de base de datos: COMIENCE EXCLUSIVO;
Para su información, en realidad mi aplicación no intenta usar la base de datos SQLite. En cambio, uso Google Analytics para rastrear usuarios y usa la base de datos SQLite.
¿Por qué pasó esto? Gracias.
Respuestas
2 para la respuesta № 1En realidad lo que estás usando es Transaction
.y cuando la transacción está en progreso, ningún otro proceso puede acceder a la base de datos.
Creo que es por eso que obtienes esta excepción
A veces ocurre
- cuando
beginTransaction
se llama en una conexión de base de datos no abierta. - cuando las sentencias SQL contienen errores de sintaxis
2 para la respuesta № 2
- Tienes que
close
la conexión con la base de datos de proceso A primero antes de comenzar a usar la base de datos con proceso B. - Esto resolverá tu
concurrency
. - usamos
db.close();
Espero que este sea tu problema.
1 para la respuesta № 3
si el proceso A intenta acceder a la base de datos sqlite, todo está bien. Sin embargo, si el proceso B lo hace, se mostrará la siguiente excepción
Sqlite solo abrirá bases de datos desde el directorio de la base de datos de sus aplicaciones.
DB_PATH = "/data/data/"+ context.getPackageName() + "/databases/";
En su caso, la base de datos está presente en el directorio del Proceso A para que pueda acceder a ella, pero el Proceso B no puede leer la base de datos del directorio del Proceso A.
Lo que puede hacer es copiar ese archivo de base de datos en el directorio del Proceso B dando la ruta anterior.