preparedstatement example ejemplo conexion java sql jdbc

java - example - getBytes vs getBinaryStream vs getBlob para obtener datos de una columna BLOB



jdbc sql server java (2)

Hay 3 formas diferentes de obtener datos de una columna Blob: getBytes getBinaryStream getBlob

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

¿Hay algún motivo en particular (rendimiento, memoria, problemas específicos de la base de datos) que deba elegir uno sobre el otro?

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


En general, usted desea elegir los métodos basados ​​en flujo (es decir, getBlob (). GetBinaryStream () o getBinaryStream ()) en lugar del método de matriz de bytes.

  1. Actuación. 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.

El peor de los casos es que 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 penalización apreciable por el uso de los métodos de transmisión.


Si va a extraer una gran cantidad de datos (es decir, suficientes datos para causar problemas de memoria), entonces getBinaryStream le dará la mayor flexibilidad para procesar y descartar los datos a medida que los lea.

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

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