RE: jdbc: getBinaryStream blocks on second call
От | Peter Mount |
---|---|
Тема | RE: jdbc: getBinaryStream blocks on second call |
Дата | |
Msg-id | 1B3D5E532D18D311861A00600865478CF1B610@exchange1.nt.maidstone.gov.uk обсуждение исходный текст |
Ответ на | jdbc: getBinaryStream blocks on second call (Ingo Luetkebohle <ingo@blank.pages.de>) |
Список | 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 по дате отправления: