2009-04-17 9 views
16

Existen 3 maneras diferentes de obtener datos de una columna de Blob: getBytes getBinaryStream getBlobgetBytes vs getBinaryStream vs getBlob para obtener datos de una columna BLOB

Además, el objeto Blob devuelto por getBlob también tiene un getBytes y getBinaryStream en él.

¿Hay alguna razón en particular (rendimiento, memoria, problemas específicos de la base de datos) que deba elegir una sobre la otra?

El objeto Blob también tiene una llamada gratuita() que se ha introducido desde JDBC 4.0. Eso hace una diferencia?

Respuesta

12

Si vas a estar tirando de una gran cantidad de datos (es decir, datos suficientes para causar problemas de memoria), entonces getBinaryStream le dará más flexibilidad para procesar y descartar los datos a medida que lee en.

En Por otro lado, esto podría ser bastante lento, dependiendo de su controlador JDBC, ya que cada lectura de la secuencia podría implicar una gran cantidad de conversaciones en la red con la base de datos. Si llama a getBytes, entonces el conductor sabe que va a buscar todo de una sola vez, lo que es probable que sea más eficiente.

getBlob() devuelve un "puntero" a los datos, que puede manipular utilizando los métodos en la interfaz Blob. Si necesita modificar o entusiasmarse con los datos in-situ, esto podría ser lo mejor para usted.

+0

También vale la pena asegurarse de que se implementa getBlob para su controlador JDBC antes de escribir un montón de código basado en él. Xerial sqlite-jdbc, por ejemplo, no lo implementa actualmente. – Kelly

6

Generalmente, debe elegir los métodos basados ​​en flujo (es decir, getBlob(). GetBinaryStream() o getBinaryStream()) en lugar del método de arreglo de bytes.

  1. Rendimiento. El controlador tiene la posibilidad de extraer bytes de la base de datos de forma incremental.
  2. Memoria. No tiene que cargar todos los bytes a la vez, y en un bloque contiguo.

En el peor de los casos, la base de datos (o el controlador JDBC) no es realmente compatible con la transmisión de datos binarios, pero aún así no existe una pena apreciable por el uso de los métodos de transmisión.