RE: jdbc: getBinaryStream blocks on second call - Mailing list pgsql-interfaces

From Peter Mount
Subject RE: jdbc: getBinaryStream blocks on second call
Date
Msg-id 1B3D5E532D18D311861A00600865478CF1B610@exchange1.nt.maidstone.gov.uk
Whole thread Raw
In response to jdbc: getBinaryStream blocks on second call  (Ingo Luetkebohle <ingo@blank.pages.de>)
List pgsql-interfaces
Yes the spec does say that (and also not to read a column more than once per
row).

However, internally because we store the resultset in a two dimensional
vector, this isn't a problem. I'd like to know more about this problem, just
incase it's a strange bug caused by how it's being used in this instance...

Peter

-- 
Peter Mount
Enterprise Support Officer, Maidstone Borough Council
Email: petermount@maidstone.gov.uk
WWW: http://www.maidstone.gov.uk
All views expressed within this email are not the views of Maidstone Borough
Council


> -----Original Message-----
> From: Greg Speegle [mailto:Greg@10happythings.com]
> Sent: Sunday, December 03, 2000 7:10 PM
> To: Ingo Luetkebohle
> Cc: pgsql-interfaces@postgresql.org
> Subject: Re: [INTERFACES] jdbc: getBinaryStream blocks on second call
> 
> 
> 
> Within JDBC 1.0, it is required to access the columns in a result set 
> row from left to right
> and only once. Since the Postgres JDBC driver is not totally 
> 2.0, it's 
> not mandatory, but it
> is a real good idea. I'd suggest storing the byte array 
> somewhere so you 
> don't have to
> read it twice. If you have to read it twice, the only way to 
> gaurantee 
> that it works, is to
> close the Statement and do it again.
> 
> Greg Speegle
> Baylor University
> 
> Ingo Luetkebohle wrote:
> 
> > Hello,
> > 
> > I'm using the Postgresql-JDBC interface inside of a Jave Server Page
> > and request a large object. When the page is first called, it works
> > fine. When its called twice for the same database row, the
> > ResultSet.getBinaryStream method blocks infinetely. This is on
> > postgresql 7.0.3 (from RPM, on Linux, glibc).
> > 
> > The code is something like:
> > 
> >     dbc.setAutoCommit(false);
> >     Statement st = dbc.createStatement();
> >     ResultSet rs = st.executeQuery("SELECT contents FROM 
> file WHERE id=" + id);
> >     dbc.commit();
> >     if(rs.next()) {
> >         Reader r = new InputStreamReader(rs.getBinaryStream(1));
> >         char buf[] = new char[2048];
> >         for(int read = r.read(buf); read != -1; read = 
> r.read(buf))
> >             out.write(buf, 0, read);
> > 
> >         out.flush();
> >         r.close();
> >         is.close();
> >     }
> > 
> > (yes, I known that the getBytes method is more convenient but the
> > JspWriter class a JSP page provides can't write byte[], only char[])
> > 
> 


pgsql-interfaces by date:

Previous
From: Peter Mount
Date:
Subject: RE: jdbc: getBinaryStream blocks on second call
Next
From: Peter Mount
Date:
Subject: RE: Fwd: errors with getObject() with JDBC driver