SQLite devolvió un código de error de 14
Estoy intentando copiar una base de datos existente de mi carpeta de activos y ejecutar algunas operaciones en ella. Todo está funcionando bien, pero he conseguido el siguiente error en los archivos de registro de mi emulador:
sqlite returned: error code = 14, msg = cannot open file at source line 25467 09-06 11:23:41.844: INFO/Database(22560): sqlite returned: error code = 14, msg = cannot open file at source line 25467 09-06 11:23:41.885: ERROR/Database(22560): sqlite3_open_v2("/data/data/com.dhani.Lazy/databases/LazyDB.sqlite", &handle, 1, NULL) failed 09-06 11:23:41.885: WARN/System.err(22560): android.database.sqlite.SQLiteException: unable to open database file 09-06 11:23:41.894: WARN/System.err(22560): at android.database.sqlite.SQLiteDatabase.dbopen(Native Method) 09-06 11:23:41.904: WARN/System.err(22560): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1849) 09-06 11:23:41.914: WARN/System.err(22560): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820) 09-06 11:23:41.914: WARN/System.err(22560): at com.dharani.LazyApple.Database.DataBaseHelper.checkDataBase(DataBaseHelper.java:72) 09-06 11:23:41.914: WARN/System.err(22560): at com.dharani.LazyApple.Database.DataBaseHelper.createDataBase(DataBaseHelper.java:47) 09-06 11:23:41.914: WARN/System.err(22560): at com.dharani.LazyApple.Database.DataBaseHelper.Login(DataBaseHelper.java:166) 09-06 11:23:41.914: WARN/System.err(22560): at com.dharani.LazyApple.Views.LoginView$1.onClick(LoginView.java:63) 09-06 11:23:41.934: WARN/System.err(22560): at android.view.View.performClick(View.java:2485) 09-06 11:23:41.934: WARN/System.err(22560): at android.view.View$PerformClick.run(View.java:9080) 09-06 11:23:41.944: WARN/System.err(22560): at android.os.Handler.handleCallback(Handler.java:587) 09-06 11:23:41.944: WARN/System.err(22560): at android.os.Handler.dispatchMessage(Handler.java:92) 09-06 11:23:41.944: WARN/System.err(22560): at android.os.Looper.loop(Looper.java:123) 09-06 11:23:41.944: WARN/System.err(22560): at android.app.ActivityThread.main(ActivityThread.java:3683) 09-06 11:23:41.964: WARN/System.err(22560): at java.lang.reflect.Method.invokeNative(Native Method) 09-06 11:23:41.964: WARN/System.err(22560): at java.lang.reflect.Method.invoke(Method.java:507) 09-06 11:23:41.964: WARN/System.err(22560): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 09-06 11:23:41.964: WARN/System.err(22560): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 09-06 11:23:41.964: WARN/System.err(22560): at dalvik.system.NativeStart.main(Native Method)
¿Alguna sugerencia sobre cómo solucionar este problema?
- Versiones de objetos en firebase
- Cómo rellenar una vista de lista de una base de datos SQLite
- ¿Cómo publicar una actualización de la aplicación en android-market sin borrar la base de datos local y los archivos locales?
- ¿Qué pasó con la eliminación de elementos de realm.io? RealmException "No se admite el objeto de eliminación".?
- Android.database.CursorIndexOutOfBoundsException: Índice 0 solicitado, con un tamaño de 0
- Cómo obtener todas las listas de niños de Firebase android
- Inserción masiva utilizando una matriz de ContentValues
- ¿Cuáles son las bases de datos internas y externas que pueden utilizarse con Android, Windows Phone e iOS?
- Ningún setter / campo para la advertencia Base de datos Firebase Recuperar datos Llenar Listview
- Android.database.sqlite.SQLiteException: Token no reconocido:
- Ejecución de varias sentencias con SQLiteDatabase.execSQL
- Duplicar la base de datos Android de otra aplicación?
- Realm.io notificaciones - ¿Cómo escuchar los cambios sólo en cierto cuadro?
He visto este error ocurrir si usted está utilizando sharedUserId en su manifiesto. Si cambia el sharedUserId de una aplicación y vuelve a instalar la aplicación, no tiene la propiedad necesaria para escribir en la base de datos SQLite.
Esto puede ser un poco tarde, pero espero que esto ayude para quien tiene este problema (ya que no puedo encontrar una solución definitiva alrededor).
Creo que sé la razón de esta causa (al menos para mi caso). Buscando en DDMS -> Explorador de archivos , se daría cuenta de que la carpeta de base de datos (/ data / data // bases de datos /) no existe, por lo que la aplicación no puede crear el archivo de base de datos en esa carpeta inexistente. Si puede crear una carpeta de bases de datos de alguna manera, puede evitar este problema.
Debido a que soy perezoso, acabo de usar la carpeta / data / data // files / cuando estoy en modo Emulator. Puede obtener los archivos dir usando esto:
context.getFilesDir().getPath()
Esto funcionó maravillosamente para mí en el emulador.
Espero que esto ayude a alguien.
En caso de que quiera ver algún código:
String dbFilename = "example.db"; try { File databaseFile = getDatabasePath(dbFilename); SQLiteDatabase _db = SQLiteDatabase.openOrCreateDatabase(databaseFile); } catch (Exception e) { String databasePath = getFilesDir().getPath() + "/" + dbFilename; File databaseFile = new File(databasePath); _db = SQLiteDatabase.openOrCreateDatabase(databaseFile); }
EDIT: Intenté iniciar sesión en Facebook (mi aplicación tiene integración FB) en el Emulador y / carpeta de bases de datos apareció después de que (y persistió). No estoy seguro de lo que pasó, pero es posible crear esa carpeta de alguna manera. Algo para otro experto por aquí para arrojar luz sobre.
Hoy esta edición me costó 3 horas. Lo que intenté:
- Reescribir el código de base de datos de copia.
- Eliminación de la aplicación del emulador / dispositivo
- Emulador (es) de limpieza
- Eclipse de limpieza
- Cambio de permisos de archivo
Resolví el problema copiando el código de una cuenta de Dropbox compartida a otra ubicación y refactorizando el código en el manifiesto de Android y los archivos java con otro nombre de paquete.
La aplicación funciona maravillosamente ahora.
Yo tuve el mismo problema.
Lo solucionado, estaba reemplazando
private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/";
con
String myPath = myContext.getFilesDir().getAbsolutePath().replace("files", "databases")+File.separator + DB_NAME;
Tuve el mismo código de error en logcat:
sqlite returned: error code = 14, msg = cannot open file at source line
La aplicación se ejecutaría bien (en realidad no noté ningún problema hasta que busqué en logcat!). Logcat me informó de este error, así que pensé que sería mejor conseguir esto resuelto ahora.
Resulta que si he editado el archivo de manifiesto se deshizo del error! Dentro de mi manifiesto había escrito en la versión incorrecta min sdk. Descubrí esto porque dentro del archivo de manifiesto había un indicador de exclamación a lo largo de la columna izquierda del código informándome de mi error.
Para ser exhaustivo, recomendaría que usted debe asegurarse de que todos los errores / exclamaciones se han fijado por lo que al menos puede descartarlos.
Parece que este error (y muchos más en eclipse) puede ocurrir en función de un gran número de factores! ¡Oh las alegrías!
O, otra solución fácil que trabajó para mí es como sigue:
- En la opción de configuración del emulador, haga clic en Aplicación
- Ir a Administrar aplicaciones
- Encuentra tu aplicación y haz clic en Desinstalar.
- A continuación, vuelva a ejecutar la aplicación desde Eclipse.
Mi razón era diferente: he accedido a la versión en línea de la aplicación, que creó la base de datos. La aplicación PhoneGap no pudo acceder al archivo creado por la aplicación diferente. La limpieza del caché del navegador resolvió mi problema.
El enigma se resuelve, se prueba en el emulador sin el DB y se marca mal, por lo que primero debe crear el DB
InputStream myInput = myContext.getAssets().open(DB_NAME); //Destination folder (where we created the DB empty) String outFileName = DB_PATH + DB_NAME; //We opened it BBDD Vacia as OutputStream OutputStream myOutput = new FileOutputStream(outFileName); //Transfers Bytes between input and output Stream byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } //Close the open files myOutput.flush(); myOutput.close(); myInput.close(); }
Después de eso, haga sus operaciones. ¡Buena suerte!
Me las arreglé para resolver esto al darse cuenta de que la documentación es un poco engañosa. Debe tener un nombre de archivo para el elemento comprimido que está relacionado con el nombre de su base de datos. Por ejemplo, si su base de datos se llama someData.db
, su archivo zip debe ser someData.zip
.
Además, parece que hay un diagnóstico un poco mejor si intenta abrir un db de escritura. Lo hice en el constructor, como sigue, que fue lo que en última instancia me ayudó a encontrar la solución.
SQLiteDatabase db=getWritableDatabase(); db.close();
Asegúrese de cerrar todas las instancias de cursor y db. Tuve este error debido a hacer múltiples inserciones y actualizaciones y no cerrar los cursores, causando fugas de cursor, y no puede abrir el db.
- Entradas duplicadas en ListView
- Consigo este error: Los datos exceden UNCOMPRESS_DATA_MAX en androide 2.2 pero no en 2.3