db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kathey Marsden (JIRA)" <j...@apache.org>
Subject [jira] Updated: (DERBY-3085) Fails to handle BLOB fields with a PreparedStatement with size >32750 bytes
Date Fri, 28 Sep 2007 20:27:50 GMT

     [ 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_stat2.txt

Attached is a revised patch with the changes suggested by Army.  
1) Added commment to preexisting code which only streams last EXTDTA. I hope my understanding
of this is correct. In readAndSetAllExtParams we now have.
 // Only the last EXTDTA is streamed.  This is because all of 
 // the parameters have to be set before execution and are 
 // consecutive in the network server stream, so only the last
// one can be streamed.
final boolean doStreamLOB = (streamLOB && i == numExt -1);

- Added tests for multiple parameters, matched updates where the stream is consumed and situation
where there is a row inserted but no match 

- Fixed tab/space differences (I think).

- added comments that 1000 byte buffer for draining the stream is just a random selection
that doesn't take up too much memory.

I only ran BlobClob4BlobTest as all other changes were cosmetic.

Thanks Army and Bryan for looking at the patch.


> 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:,,
>         Environment: Windows XP SP2
>            Reporter: Mikael Aronsson
>            Assignee: Kathey Marsden
>         Attachments: derby-3085_diff.txt, derby-3085_diff2.txt, derby-3085_stat.txt,
derby-3085_stat2.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] - (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
>     }
> 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.

View raw message