db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Deepa Remesh (JIRA)" <derby-...@db.apache.org>
Subject [jira] Updated: (DERBY-463) Successive writes to a java.sql.Blob.setBinaryStream(long) seem to reset the file pointer
Date Tue, 16 May 2006 15:41:07 GMT
     [ http://issues.apache.org/jira/browse/DERBY-463?page=all ]

Deepa Remesh updated DERBY-463:
-------------------------------

    Fix Version: 10.1.3.0
     Derby Info: [Patch Available]

Add fix version - 10.1.3

> Successive writes to a java.sql.Blob.setBinaryStream(long) seem to reset the file pointer
> -----------------------------------------------------------------------------------------
>
>          Key: DERBY-463
>          URL: http://issues.apache.org/jira/browse/DERBY-463
>      Project: Derby
>         Type: Bug

>   Components: JDBC
>     Versions: 10.0.2.1
>  Environment: Sun java full version "1.4.2_05-b04"
> Linux x86
> Derby is run in network server mode
>     Reporter: Laurenz Albe
>     Assignee: Fernanda Pizzorno
>      Fix For: 10.2.0.0, 10.1.3.0
>  Attachments: DERBY-463.diff, DERBY-463.diff, DERBY-463.stat, DERBY-463.stat, derby-463-v10.1.diff,
derby-463-v10.1.status
>
> I have a table
> PEOPLE(SEQ_ID INT NOT NULL PRIMARY KEY, PICTURE BLOB).
> A row is inserted; both values are not NULL.
> From inside a JDBC program, I select the Blob for update.
> I then get the Blob output stream with a call to
>   Blob.setBinaryStream(long)
> To this stream I write several times with
>   OutputStream.write(byte[], int, int)
> I close the stream, update the selected row with the new Blob and commit.
> The new value of the Blob now is exactly the value of the last content of the byte[],
> and it is like the previous calls to write() have never taken place, or as if the file
pointer
> of the output stream has been reset between the calls.
> A sample program follows; the size of the input file "picture.jpg" is 23237, the length
> of the Blob after the program has run is 23237 % 1024 = 709
> ------------ sample program -------------
> import java.sql.*;
> class TestApp {
>    private TestApp() {}
>    public static void main(String[] args)
>          throws ClassNotFoundException, SQLException, java.io.IOException {
>       // try to load JDBC driver
>       Class.forName("com.ibm.db2.jcc.DB2Driver");
>       // open the input file
>       java.io.InputStream instream = new java.io.FileInputStream("picture.jpg");
>       // login to database
>       Connection conn = DriverManager.getConnection(
>             "jdbc:derby:net://dbtuxe/testdb", "laurenz", "apassword");
>       conn.setAutoCommit(false);
>       // select Blob for update
>       PreparedStatement stmt = conn.prepareStatement(
>             "SELECT PICTURE FROM PEOPLE WHERE SEQ_ID=? FOR UPDATE OF PICTURE");
>       stmt.setInt(1, 1);
>       ResultSet rs = stmt.executeQuery();
>       // get Blob output stream
>       rs.next();
>       Blob blob = rs.getBlob(1);
>       java.io.OutputStream outstream = blob.setBinaryStream(1l);
>       // copy the input file to the Blob in chunks of 1K
>       byte[] buf = new byte[1024];
>       int count;
>       while (-1 != (count = instream.read(buf))) {
>          outstream.write(buf, 0, count);
>          System.out.println("Written " + count + " bytes to Blob");
>       }
>       // close streams
>       instream.close();
>       outstream.close();
>       // update Blob with new value
>       String cursor = rs.getCursorName();
>       PreparedStatement stmt2 = conn.prepareStatement(
>             "UPDATE PEOPLE SET PICTURE=? WHERE CURRENT OF " + cursor);
>       stmt2.setBlob(1, blob);
>       stmt2.executeUpdate();
>       // clean up
>       stmt2.close();
>       stmt.close();
>       conn.commit();
>       conn.close();
>    }
> }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message