db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel John Debrunner (JIRA)" <derby-...@db.apache.org>
Subject [jira] Commented: (DERBY-1368) EOFException when reading from blob's binary stream
Date Fri, 02 Jun 2006 15:41:31 GMT
    [ http://issues.apache.org/jira/browse/DERBY-1368?page=comments#action_12414446 ] 

Daniel John Debrunner commented on DERBY-1368:
----------------------------------------------

I think this is fixed for most cases in the 10.2/trunk line. For any newly inserted value
it will be. In some cases with an value from an upgraded database it will not be, though your
test program will not show that case.  In most cases now the length is stored with the value,
if not the first call to length() on the Blob will save the determined value.

> EOFException when reading from blob's binary stream
> ---------------------------------------------------
>
>          Key: DERBY-1368
>          URL: http://issues.apache.org/jira/browse/DERBY-1368
>      Project: Derby
>         Type: Bug

>     Versions: 10.1.2.1
>     Reporter: Tobias Bocanegra

>
> reading the 'length()' of a blob reads a previously aquired binary stream.
> test case:
>     public static void main(String[] argv) throws Exception {
>         String driver = "org.apache.derby.jdbc.EmbeddedDriver";
>         String url = "jdbc:derby:derby/test;create=true";
>         Class.forName(driver);
>         Connection con = DriverManager.getConnection(url, "sa", "");
>         con.setAutoCommit(true);
>         // create table
>         System.out.println("1) creating table...");
>         Statement stmt = con.createStatement();
>         stmt.execute("create table T1 (ID char(32) PRIMARY KEY, DATA blob(2G) not null)");
>         stmt.close();
>         // add row
>         System.out.println("2) adding row...");
>         byte[] data = new byte[1024*1024*1];
>         data[0] = 1;
>         data[1] = 2;
>         PreparedStatement s = con.prepareStatement("insert into T1 (ID, DATA) values
(?, ?)");
>         s.setString(1, "id");
>         s.setBytes(2, data);
>         s.execute();
>         s.close();
>         // read row
>         System.out.println("3) reading row...");
>         s = con.prepareStatement("select DATA from T1 where ID = ?");
>         s.setString(1, "id");
>         s.execute();
>         ResultSet rs = s.getResultSet();
>         rs.next();
>         Blob b = rs.getBlob(1);
>         // test output
>         System.out.println("4) Length: " + b.length());
>         InputStream in = b.getBinaryStream();
>         System.out.println("   First Byte: " + in.read());
>         in.close();
>         in = b.getBinaryStream();
>         System.out.println("5) Length: " + b.length());
>         System.out.println("   First Byte: " + in.read());
>         in.close();
>         rs.close();
>         s.close();
>         con.close();
>     }
> gives:
> 1) creating table...
> 2) adding row...
> 3) reading row...
> 4) Length: 1048576
>    First Byte: 1
> 5) Length: 1048576
>    First Byte: -1
> imo, 5) is wrong.

-- 
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