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?

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:

  1. En la opción de configuración del emulador, haga clic en Aplicación
  2. Ir a Administrar aplicaciones
  3. Encuentra tu aplicación y haz clic en Desinstalar.
  4. 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.

  • Acceso a bases de datos en Android
  • SQLiteOpenHelper - ¿Cómo se crea la base de datos?
  • Android SQLite ON CONFLICT UPDATE es posible?
  • Diferencia entre getWritableDatabase () y getReadableDatabase ()?
  • Manejo de errores SQLException en android
  • Base de datos de SQLite de SQL, bloqueo y versión
  • Preguntas sobre el uso de Android Backup Service con una base de datos SQLite
  • ¿Puede Universal loader de imágenes para Android trabajar con imágenes de sqlite db?
  • ¿Puedo descargar un db de SQLite en / sdcard y acceder desde mi aplicación Android?
  • ¿Cómo conectarse a un servidor PostgreSQL a través de JDBC en Android?
  • Algunas preguntas sobre los cursores de la base de datos SQLite en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.