RE: jdbc: getBinaryStream blocks on second call

From: Peter Mount <petermount(at)maidstone(dot)gov(dot)uk>
To: "'Greg Speegle'" <Greg(at)10happythings(dot)com>, Ingo Luetkebohle <ingo(at)blank(dot)pages(dot)de>
Cc: pgsql-interfaces(at)postgresql(dot)org
Subject: RE: jdbc: getBinaryStream blocks on second call
Date: 2000-12-05 14:43:07
Message-ID: 1B3D5E532D18D311861A00600865478CF1B610@exchange1.nt.maidstone.gov.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)maidstone(dot)gov(dot)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(at)10happythings(dot)com]
> Sent: Sunday, December 03, 2000 7:10 PM
> To: Ingo Luetkebohle
> Cc: pgsql-interfaces(at)postgresql(dot)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[])
> >
>

Browse pgsql-interfaces by date

  From Date Subject
Next Message Peter Mount 2000-12-05 14:44:33 RE: jdbc: getBinaryStream blocks on second call
Previous Message Peter Mount 2000-12-05 14:40:55 RE: jdbc: getBinaryStream blocks on second call