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 Thu, 27 Sep 2007 21:34: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_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.


Mime
View raw message