From 3046fdd56a35c0397701a43606e78d8ad1cdd607 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sat, 27 Sep 2014 00:16:01 +0200 Subject: [PATCH] DefaultLobCreator's streamAsLob mode supports JDBC 4.0 setBlob/Clob variants without length parameter as well Issue: SPR-12265 --- .../jdbc/support/lob/DefaultLobHandler.java | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/DefaultLobHandler.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/DefaultLobHandler.java index 4e25be09eb..57aad967a2 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/DefaultLobHandler.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/DefaultLobHandler.java @@ -255,7 +255,12 @@ public class DefaultLobHandler extends AbstractLobHandler { if (streamAsLob) { if (binaryStream != null) { - ps.setBlob(paramIndex, binaryStream, contentLength); + if (contentLength >= 0) { + ps.setBlob(paramIndex, binaryStream, contentLength); + } + else { + ps.setBlob(paramIndex, binaryStream); + } } else { ps.setBlob(paramIndex, (Blob) null); @@ -318,7 +323,13 @@ public class DefaultLobHandler extends AbstractLobHandler { if (streamAsLob) { if (asciiStream != null) { try { - ps.setClob(paramIndex, new InputStreamReader(asciiStream, "US-ASCII"), contentLength); + Reader reader = new InputStreamReader(asciiStream, "US-ASCII"); + if (contentLength >= 0) { + ps.setClob(paramIndex, reader, contentLength); + } + else { + ps.setClob(paramIndex, reader); + } } catch (UnsupportedEncodingException ex) { throw new SQLException("US-ASCII encoding not supported: " + ex); @@ -355,7 +366,12 @@ public class DefaultLobHandler extends AbstractLobHandler { if (streamAsLob) { if (characterStream != null) { - ps.setClob(paramIndex, characterStream, contentLength); + if (contentLength >= 0) { + ps.setClob(paramIndex, characterStream, contentLength); + } + else { + ps.setClob(paramIndex, characterStream); + } } else { ps.setClob(paramIndex, (Clob) null);