Oplcomtedted oracle jdbc BLOB manejo

Cuando busco en la web la inserción de BLOB en la base de datos Oracle con el controlador jdbc thin, la mayoría de las páginas web sugieren un enfoque de 3 pasos:

inserciónempty_blob() valor.seleccione la fila confor update. inserte el valor real.

Esto funciona bien para mí, aquí hay un ejemplo:

Connection oracleConnection = ...

byte[] testArray = ...

PreparedStatement ps = oracleConnection.prepareStatement(
    "insert into test (id, blobfield) values(?, empty_blob())");
ps.setInt(1, 100);
ps.executeUpdate();
ps.close();
ps = oracleConnection.prepareStatement(
    "select blobfield from test where id = ? for update");
ps.setInt(1, 100);
OracleResultSet rs = (OracleResultSet) ps.executeQuery();
if (rs.next()) {
    BLOB blob = (BLOB) rs.getBLOB(1);
    OutputStream outputStream = blob.setBinaryStream(0L);
    InputStream inputStream = new ByteArrayInputStream(testArray);
    byte[] buffer = new byte[blob.getBufferSize()];
    int byteread = 0;
    while ((byteread = inputStream.read(buffer)) != -1) {
        outputStream.write(buffer, 0, byteread);
    }
    outputStream.close();
    inputStream.close();
}

Hay algunas páginas web donde los autores sugieren usar una solución más simple de 1 paso. Ejemplo anterior con esta solución:

Connection oracleConnection = ...

byte[] testArray = ...

PreparedStatement ps = oracleConnection.prepareStatement(
    "insert into test(id, blobfield) values(?, ?)");
BLOB blob = BLOB.createTemporary(oracleConnection, false, BLOB.DURATION_SESSION);
OutputStream outputStream = blob.setBinaryStream(0L);
InputStream inputStream = new ByteArrayInputStream(testArray);
byte[] buffer = new byte[blob.getBufferSize()];
int byteread = 0;
while ((byteread = inputStream.read(buffer)) != -1) {
    outputStream.write(buffer, 0, byteread);
}
outputStream.close();
inputStream.close();

ps.setInt(1, 100);
ps.setBlob(2, blob);
ps.executeUpdate();
ps.close();

El segundo código es mucho más fácil, así que mi pregunta es: ¿cuál es el punto de la primera solución (popular)? ¿Existe (hubo) algún tipo de restricción para la segunda solución (número de versión del servidor Oracle, versión del controlador jdbc, tamaño del blob, ...)? ¿Es la primera solución mejor (velocidad, consumo de memoria, ...)? ¿Alguna razón para no usar el segundo enfoque más simple?

La misma pregunta exacta se aplica a los campos CLOB.

Respuestas a la pregunta(18)

Su respuesta a la pregunta