[
https://issues.apache.org/jira/browse/DERBY-3085?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Kathey Marsden updated DERBY-3085:
----------------------------------
Attachment: derby-3085_stat.txt
derby-3085_diff.txt
Attached is a patch to resolve this issue. My solution was to store a
reference to the stream for the streamed parameter in the
DRDAStatement.paramState and then drain the stream after statement execution if
needed. There is only one parameter ever streamed, so only one field needed to
be added. I added a test for both BLOB's and CLOB's to Blob4ClobTest.java.
Tests are running now.
> Fails to handle BLOB fields with a PreparedStatement with size >32750 bytes
> ---------------------------------------------------------------------------
>
> Key: DERBY-3085
> URL: https://issues.apache.org/jira/browse/DERBY-3085
> Project: Derby
> Issue Type: Bug
> Components: JDBC, Network Client
> Affects Versions: 10.2.1.6, 10.2.2.0, 10.3.1.4
> Environment: Windows XP SP2
> Reporter: Mikael Aronsson
> Assignee: Kathey Marsden
> Attachments: derby-3085_diff.txt, derby-3085_stat.txt, TestBlob.java,
> trace.out.norows, trace.out.withrow
>
>
> Java Version: 1.6.0_02
> Java Vendor: Sun Microsystems Inc.
> Java home: C:\Program Files\Java\jre1.6.0_02
> Java classpath: derbytools.jar
> OS name: Windows XP
> OS architecture: x86
> OS version: 5.1
> Java user name: Ma
> Java user home: C:\Documents and Settings\ma
> Java user dir: c:\tools\derby\lib
> java.specification.name: Java Platform API Specification
> java.specification.version: 1.6
> --------- Derby Information --------
> JRE - JDBC: Java SE 6 - JDBC 4.0
> [C:\tools\derby\lib\derbytools.jar] 10.3.1.4 - (561794)
> The following code fails:
> // Data is a byte[] vector
> ByteArrayInputStream is = new ByteArrayInputStream( data);
> String sql = "UPDATE MyTable SET FContents=? WHERE FName='" + name + "'";
> PreparedStatement ps = conn.prepareStatement( sql);
> ps.setBinaryStream( 1, is, data.length);
>
> if( ps.executeUpdate() == 0)
> {
> // it throws an exception here if the data array us larger then
> around 32750 bytes!!!
> }
> It look's like when the size of the data[] vector is > 32750 bytes or so it
> throws an exception like this:
> java.sql.SQLException: A network protocol error was encountered and the
> connection has been terminated: A PROTOCOL Data Stream Syntax Error was
> detected. Reason: 0x0. Plaintext connection attempt to an SSL enabled server?
> at
> org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown
> Source)
> at org.apache.derby.client.am.SqlException.getSQLException(Unknown
> Source)
> at org.apache.derby.client.am.PreparedStatement.executeUpdate(Unknown
> Source)
> The table is defined as:
> CREATE TABLE MyTable (FName varchar(300) NOT NULL,FContents BLOB(16M) NOT
> NULL)
> It does loook like this only happens with the NetWork client driver, the
> embedded driver works fine.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.