sqlitedatabase - sqlite android studio 2018
Excepción aleatoria android.database.sqlite.SQLiteException: no se puede abrir el archivo de base de datos (7)
Mi aplicación utiliza un controlador de excepciones no capturado que me envía el seguimiento de la pila cuando la aplicación falla. A menudo recibo este informe de usuarios aleatorios.
No puedo replicarlo, la apertura de la base de datos siempre tiene éxito en mi caso. Esta no es una base de datos almacenada en una tarjeta SD externa, solo una base de datos abierta con SQLiteOpenHelper(context, "SomeName", null, someVersionCode)
.
¿Tienes alguna experiencia con esto? ¿Cuáles son las posibilidades que puedo consultar antes de abrir la base de datos?
¡Gracias!
android.database.sqlite.SQLiteException: unable to open database file
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
at android.app.ActivityThread.access$2200(ActivityThread.java:119)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4363)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteException: unable to open database file
at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1698)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:739)
at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:761)
at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:754)
at android.app.ApplicationContext.openOrCreateDatabase(ApplicationContext.java:476)
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:193)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
@yuku
Este tipo de problema que he enfrentado, he resuelto este problema de esa manera.
Necesitamos verificar si la base de datos anterior es igual a la nueva base de datos , si algo cambió a la nueva base de datos en ese momento necesitamos eliminar la base de datos antigua e instalar la nueva base de datos O alterar la tabla según la nueva base de datos
La segunda opción es fácil, simplemente desinstale su aplicación anterior y luego instale una nueva.
Espero que esto funcione para usted..!!!
Me he enfrentado a este problema.
Una de mis aplicaciones se estaba comportando de la misma manera, porque agregué el código para copiar la base de datos desde los activos a la ubicación especificada en la pantalla de inicio (la pantalla que está visible cuando se inicia la aplicación y se apaga automáticamente después de unos segundos).
Y lo que estaba sucediendo en algunos casos, esa base de datos no se copiaba en el marco de tiempo especificado y el acceso desde la aplicación causaba excepciones.
Lo que hice,
Acabo de escribir el código para copiar la base de datos en el subproceso en segundo plano y mostrarle la pantalla de bienvenida al usuario hasta que no se copie la base de datos solo después de que se muestre la siguiente pantalla.
Podría haber otra solución en caso de que, si la aplicación se está instalando en la versión anterior, escriba el código para copiar los datos guardados de la versión anterior de la aplicación a la nueva versión si la prevención de datos es necesaria y la nueva versión contiene modelos diferentes a los de la versión anterior. .
Para cualquier aplicación de base de datos, primero creo la base de datos sqlite con el complemento Sqlite Manager de Firefox y la llevo a la carpeta / res / raw. Luego, en mi código, verifico si la base de datos existe en / data / data para esta aplicación. Si no, copio el archivo db a ese directorio con mi código.
Para su situación, es difícil determinar la razón exacta sin ver cómo creó su base de datos y cómo la está utilizando. Puede haber varias razones para el problema de obtener esta excepción. Algunos temas ya mencionados por otros. Quiero mencionar una. ¿Puedes intentar abrir la base de datos de esta manera?
SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
Probablemente, podría intentar ayudarlo mejor si muestra sus fragmentos de código. Bueno, mis métodos se describen aquí, puedes echar un vistazo si eso ayuda.
Tengo el mismo error después de actualizar mi firmware de Android. la base de datos fue creada por el firmware antiguo y, por lo tanto, no pudo abrirse por el nuevo firmware. los usuarios podrían resolver este error al desinstalar y reinstalar su aplicación.
Una de las posibles situaciones en las que esto podría suceder es cuando accede a su archivo de base de datos desde varios subprocesos y cuando uno de los subprocesos bloquea el archivo mientras intenta abrirlo para modificarlo desde otro subproceso.
puede haber si su aplicación abre la base de datos desde varios subprocesos al mismo tiempo que puede ser la razón de esta excepción.
intente el método sincronizado para abrir el método database.synchronized no permitirá que la base de datos se abra desde varios subprocesos al mismo tiempo. Pon el código de abajo en tu dbHelper
private synchronized SQLiteDatabase getWritableDB() {
//get your database and return it from this method.
}
y llama a estos métodos cuando estás recibiendo db. Espero que ayude.
Reinstale la aplicación e intente usar el bloque sincronizado para las operaciones CURD de la base de datos :)