/ / Android android.database.sqlite.SQLiteException: no se puede abrir el archivo de base de datos - android, sqlite, google-analytics

Android android.database.sqlite.SQLiteException: no se puede abrir el archivo de base de datos: android, sqlite, google-analytics

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 № 1

En 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

  1. cuando beginTransaction se llama en una conexión de base de datos no abierta.
  2. 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.