Descargo un db de Internet. Lo guardo en mi carpeta de datos y lo abro. Dentro de la base de datos hay una tabla "Anuncios" con 6 campos. 2 de estos campos son BLOB. Cuando quiero leer en esta tabla ... Tengo un problema ... Noté que cuando leo una fila con un campo de blob más grande que 1 mega byte, esto causa una excepción ... "obtener el campo de la ranura 0 col 0 fallido ". si es un poco blob, todo está bien ... gracias de antemano :)Límite de tamaño de cursor en Android SQLiteDatabase
Respuesta
Hay un límite de 1MB en los recursos internos debido a la descompresión dinámica; el límite de 1 MB también parece aplicarse a los blobs del Cursor, pero esto no parece estar documentado en ninguna parte.
En general, debe evitar blobs en SQLite, ya que tienen un bajo rendimiento; en su lugar, guarde los datos de blob como un archivo y almacene la ubicación del archivo en su base de datos.
¿La consulta que está utilizando 'selecciona' dijo blob? ¿Puedes omitirlo? Si no puedes, estás usando:
blob = rs.getBlob(column) ;
InputStream in = blob.getBinaryStream();
o
blob.getBytes(1, lengthOblob) ;
El primer método le permitirá leer la burbuja en trozos. El segundo va a tener la burbuja cargada de una vez.
No estoy seguro de lo que quiere decir con "cargado de una vez". Dado que 'getBlob()' devuelve un 'byte []', los datos ya están allí en el montón ... – vaughandroid
Suponiendo que 'rs' es un Cursor, esa primera llamada a getBlob() fallará en datos grandes debido a el tamaño de la ventana del cursor. – sgibly
miradas como apoyo BLOB de Android aún no está implementado ...
http://www.basic4ppc.com/forum/basic4android-updates-questions/6648-support-sqlite-blob.html
¿Qué datos se almacenan en los campos BLOB? Yo adivinaría fotos.
Recomendaría NO usar BLOB. El sistema de archivos es una opción mucho mejor para los datos binarios.
¿Puede explicarnos un poco más sobre lo que quiere lograr con la base de datos?
Mejor respuesta: No use BLOB en * cualquier * base de datos.Los RDBM no son especialmente adecuados para almacenar grandes piezas de datos sin formato; para eso es un sistema de archivos. –
@David Souther Gracias por el comentario, tienes razón. Me gustaría pensar que los BLOB son útiles para algo, por eso fui un poco menos definitivo. Sin embargo, no puedo pensar en un buen caso de uso. ¿Almacena películas BluRay? (bromeando) – Jonathan
Esa publicación es de 2007. Los BLOB definitivamente son compatibles, y lo han sido desde al menos 1.6 (a.k.a. nivel de API 4, a.k.a. Donut). El problema es con valores BLOB de más de 1MB, como señaló OP. –
Hay un límite de 1 MB por operación. (No estoy seguro si esto es por fila, o por columna en el caso de consultas SQLite). El límite se debe a que la API SQLite interactúa con sqlite fuera de proceso en el sistema Binder/Parcel IPC. El mismo límite se aplica a los valores dentro de un paquete (por ejemplo, extras de uso).
La memoria intermedia de transacciones aglutinante tiene un tamaño limitado fija, actualmente 1Mb, que es compartida por todas las transacciones en curso para el proceso.
Ver: http://developer.android.com/reference/android/os/TransactionTooLargeException.html
El límite de 1 MB es el tamaño máximo de la ventana del Cursor. Este es el buffer de memoria usado para almacenar filas de resultados para transferencias IPC. El tamaño de la ventana crece dinámicamente hasta este límite. – WindRider
Lectura de un BLOB que es menos de 100 KB a partir de una base de datos SQLite es más rápido que la lectura de la misma desde el sistema de archivos. Sin embargo, cualquier cosa mayor que eso se conserva mejor en el disco, con una referencia en el db. Más información en: http://www.sqlite.org/intern-v-extern-blob.html
Gracias por la referencia. –
@frederick nyawaya: ¿cuál sería el mejor? ¿almacenar imágenes/audio como una BLOB en la base de datos o simplemente almacenar la ruta del sistema de archivos? – Ajay
@Ajay como parte del sistema de archivos –
- 1. Cursor Android tamaño máximo
- 2. consulta de Android SQLiteDatabase con LIKE
- 3. Resolución de conflictos en SQLiteDatabase de Android
- 4. Intent.putExtras límite de tamaño?
- 5. límite de tamaño del portapapeles
- 6. iPhone límite de tamaño aplicación
- 7. SQLiteDatabase - Cómo usar where clause?
- 8. límite de tamaño de buzón de scala
- 9. límite de tamaño de archivo de SharePoint
- 10. Límite de tamaño de almacenamiento dinámico de Android, ¿todavía necesitamos diseñar aplicaciones teniendo en cuenta un límite de 16 MB?
- 11. Cursor nulo en Android
- 12. C# límite de tamaño de archivo
- 13. ¿Tamaño de almacenamiento límite de MongoDB?
- 14. límite de tamaño de MySQL VARCHAR
- 15. Colecciones: Guayaba límite de tamaño de permutación
- 16. AJAX Límite de tamaño de respuesta
- 17. CodeIgniter límite de tamaño de la sesión
- 18. Límite de tamaño de parámetro JSON
- 19. AsyncFileUpload límite de tamaño de archivo
- 20. Cómo probar si el cursor está vacía en una consulta SQLiteDatabase
- 21. MVC3 Acción Tamaño del archivo de límite
- 22. cursor de texto de Android en EditText
- 23. ¿Importa el límite de tamaño VARCHAR?
- 24. ¿Puedo cambiar el tamaño del Cursor en el campo de texto de edición de Android?
- 25. javascript object límite de tamaño máximo
- 26. ¿Por qué usar SQLiteOpenHelper sobre SQLiteDatabase?
- 27. Obtenga el límite máximo de tamaño de la textura OpenGL ES 2.0 en Android
- 28. Determinación del límite de tamaño máximo/mínimo de la textura en Android OpenGLES
- 29. Obteniendo cadenas de un cursor en Android?
- 30. Límite de tamaño del tipo de datos JSON en PostgreSQL
En general, debe evitar blobs en SQLite, ya que funcionan mal; en su lugar, guarde los datos de blob como un archivo y almacene la ubicación del archivo en su base de datos. ---> Muchas gracias .. –
AndroidKid está en lo cierto. Estoy seguro de que existe un caso de uso de BLOB, sin embargo, no puedo pensar en uno. :) – Jonathan