db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Unai Vivi (JIRA)" <j...@apache.org>
Subject [jira] Created: (DERBY-5090) Retrieving BLOB fields sometimes fails
Date Thu, 03 Mar 2011 16:51:37 GMT
Retrieving BLOB fields sometimes fails
--------------------------------------

                 Key: DERBY-5090
                 URL: https://issues.apache.org/jira/browse/DERBY-5090
             Project: Derby
          Issue Type: Bug
          Components: JDBC
    Affects Versions: 10.7.1.1
         Environment: JDBC derby embedded driver
            Reporter: Unai Vivi
            Priority: Minor


This is my first issue report, so please be understanding if I'm posting the wrong thing,
in the wrong place or in the wrong way. I just want to help. :)

While iterating through a ResultSet, when accessing a BLOB field to read its contents via
an InputStream, I noticed that:
- if the current ResultSet's has been "warmed up" by retrieving another column first, everything
it's fine;
- if, on the other hand, you first-thing access the BLOB (and read other columns later), then
upon reading the first byte out the InputStream bound to the BLOB field (ResultSet.getBinaryStream("col_name"))
an IOException is thrown (and IOException's getMessage() method returns null).

Following is an example, taken from a real application. The two code segments only differ
in the fact that a SMALLINT & VARCHAR read is done before/after the BLOB read.

--Working snippet--
[...]
                    icRelPath[i] = "imm" + File.separator + "ic" + "_" + rs.getShort("setIcone")
+ "_" + i + "." + rs.getString("estensione");
                    AutoCloseInputStream acis = new AutoCloseInputStream(rs.getBinaryStream("ic"
+ i));
                    if (rs.wasNull())
                        icRelPath[i] = null;
                    else
                    {
                        //icRelPath[i] = "imm" + File.separator + "ic" + "_" + rs.getShort("setIcone")
+ "_" + i + "." + rs.getString("estensione");
                        BufferedInputStream bis = new BufferedInputStream(acis);
                        int b = bis.read();//READS FINE
[...]

--Broken snippet--
[...]
                    //icRelPath[i] = "imm" + File.separator + "ic" + "_" + rs.getShort("setIcone")
+ "_" + i + "." + rs.getString("estensione");
                    AutoCloseInputStream acis = new AutoCloseInputStream(rs.getBinaryStream("ic"
+ i));
                    if (rs.wasNull())
                        icRelPath[i] = null;
                    else
                    {
                        icRelPath[i] = "imm" + File.separator + "ic" + "_" + rs.getShort("setIcone")
+ "_" + i + "." + rs.getString("estensione");
                        BufferedInputStream bis = new BufferedInputStream(acis);
                        int b = bis.read();//THROWS IOException WITH A null ERROR MESSAGE
STRING
[...]

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message