No hay tal tabla android_metadata, ¿cuál es el problema?
Estoy copiando una base de datos preexistente a /data/data/packagename/databases
usando el código aprendido de using-your-own-sqlite-database-in-android-applications
Después de copiar, recibo el siguiente mensaje de registro al abrir la base de datos:
- Mostrar datos SQLite en RecyclerView
- Android: Cómo sumar todas las columnas de una base de datos SQLite y devolver 1 variable única
- SQLite por qué copiamos db en carpeta de activos
- Simple exportación e importación de una base de datos SQLite en Android
- Usando la instrucción update en sqlite en android
No hay tal tabla android_metadata
¿Necesito crear una tabla denominada android_metadata? Y lo que los valores que necesito insertar en esta tabla de base de datos
Muchas gracias
- Android SimpleCursorAdapter no se actualiza cuando cambia la base de datos
- Cómo agregar más de una columna cuando se utiliza el método setCursor del constructor de alertdialog para mostrar una lista de elementos de una base de datos?
- SQLite de Android - Cursor y ContentValues
- Obtener cadena, fecha, hora y int de sqlite base de datos en android
- Populating Spinner de la base de datos SQLite Android
- Android: falló a setLocale () al construir, cerrando la base de datos
- Base de datos SQLite de Android: inserción lenta
- SQLITE INSERT con ID manual (clave principal)
De hecho, con un poco más de lectura, he descubierto que necesito usar el indicador SQLiteDatabase.NO_LOCALIZED_COLLATORS
al llamar a SQLiteDatabase.openDatabase()
– esto ya no causa el problema.
Utilizar
SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);
o
SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.OPEN_READWRITE);
Parece que por alguna razón android requiere que cada base de datos tenga una tabla llamada android_metadata que incluya al menos una configuración regional. El blog de reigndesign que mencionaste te dice cómo crear la tabla y pre-llenarla con una configuración regional.
Compruebe si su base de datos contiene esta tabla y si la tabla tiene algún contenido.
Ya estoy utilizando como se da en ese enlace durante mucho tiempo ..
Funciona .. Checkout de su DB de nuevo la mesa creada o no?
Prefiero instalar SQLite Manager plugin en firefox para la operación de base de datos sqlite .. después de completar todo el proceso como se menciona en el mismo enlace ..
Pedido http://www.devx.com/wireless/Article/40842/1954 .
Contiene todas las operaciones de base de datos.
También podría ser sólo permisos de archivo – el mensaje de error es engañoso. Primero debes encontrar el ID de usuario de la aplicación (esto es suponiendo que tienes acceso root):
$ adb shell grep <packagename> /data/system/packages.xml
La salida debería tener el siguiente aspecto:
<package name="com.fsck.k9" codePath="/data/app/com.fsck.k9-1.apk" nativeLibraryPath="/data/data/com.fsck.k9/lib" flags="0" ft="1306ecac340" it="1306ecac9d2" ut="1306ecac9d2" version="14001" userId="10002">
UserId aquí es 10002.
Luego arreglar los permisos:
$ adb shell chown -R 10002:10002 /data/data/<packagename>
Cuando copia la base de datos de su directorio de activos, por ejemplo, debe tener ya la tabla android_metadata creada en ella. Esta tabla debe tener dos columnas:
_id = an integer value locale = en
En mi caso, he descubierto que este error ocurrirá si dejo open transaction
una open transaction
.
En otras palabras: Si se olvida de commit
o rollback
una transacción, en la próxima vez que ingrese en su aplicación, este error se eleva.
- Android – ¿Es posible cajón de navegación desde el lado derecho?
- Animación de fragmentos y la pila trasera