private boolean setLobParameter(Env env, int index, Value value) { if (_preparedStmt == null) { return false; } try { if (value == null || value.isNull()) { _preparedStmt.setObject(index, null); } else if (value.isString()) { _preparedStmt.setBinaryStream(index, value.toInputStream(), value.length()); } else { InputStream inputStream = value.toInputStream(); if (inputStream == null) { env.warning( L.l( "type {0} ({1}) for parameter index {2} cannot be used for lob", value.getType(), value.getClass(), index)); return false; } int length = -1; if (value instanceof FileReadValue) { length = (int) ((FileReadValue) value).getLength(); if (length <= 0) length = -1; } if (length < 0) { TempBuffer tempBuffer = TempBuffer.allocate(); try { byte[] bytes = new byte[1024]; int len; while ((len = inputStream.read(bytes, 0, 1024)) != -1) tempBuffer.write(bytes, 0, len); } catch (IOException e) { env.warning(e); return false; } TempReadStream tempReadStream = new TempReadStream(tempBuffer); tempReadStream.setFreeWhenDone(true); _preparedStmt.setBinaryStream( index, new ReadStream(tempReadStream), tempBuffer.getLength()); } else { _preparedStmt.setBinaryStream(index, inputStream, length); } } } catch (SQLException e) { setError(env, e); return false; } return true; }