Thread: Bug with blobs?
Hi, I was getting an exception thrown when using Hibernate to read blobs but I've pared it down to something very simple - hopefully it's just something silly. Here's the snippet of code :- String query = "select imageblob from tempimages where id=1"; Connection con; PreparedStatement s; ResultSet rs; try { Class.forName(driver); con = DriverManager.getConnection(url, username, password); s = con.prepareStatement(query); rs = s.executeQuery(); rs.next(); java.sql.Blob blob = rs.getBlob("imageblob"); It throws a org.postgresql.util.PSQLException: Bad value for type int : \377\330\377\340\000 .... <blob data removed> at org.postgresql.jdbc2.AbstractJdbc2ResultSet.toInt(AbstractJdbc2ResultSet.java:2528) at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getInt(AbstractJdbc2ResultSet.java:2003) at org.postgresql.jdbc3.Jdbc3ResultSet.getBlob(Jdbc3ResultSet.java:55) at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getBlob(AbstractJdbc2ResultSet.java:323) at PgTest.run(PgTest.java:46) at PgTest.main(PgTest.java:63) This is with postgresql 8.0.3 and version 312 of the driver (on Linux) Help, help! - What am I doing wrong!? Thanks for any help, Rob
On Thu, 11 Aug 2005, Rob Kirkbride wrote: > I was getting an exception thrown when using Hibernate to read blobs but > I've pared it down to something very simple - hopefully it's just > something silly. > > String query = "select imageblob from tempimages where id=1"; > > java.sql.Blob blob = rs.getBlob("imageblob"); > > It throws a > org.postgresql.util.PSQLException: Bad value for type int : > \377\330\377\340\000 .... <blob data removed> > at > org.postgresql.jdbc2.AbstractJdbc2ResultSet.toInt(AbstractJdbc2ResultSet.java:2528) > at Postgresql maps Blob data to the oid datatype, not bytea. For bytea data you should use getBytes() not getBlob. Kris Jurka
Kris Jurka wrote: > > > On Thu, 11 Aug 2005, Rob Kirkbride wrote: > >> I was getting an exception thrown when using Hibernate to read blobs but >> I've pared it down to something very simple - hopefully it's just >> something silly. >> >> String query = "select imageblob from tempimages where id=1"; >> >> java.sql.Blob blob = rs.getBlob("imageblob"); >> >> It throws a >> org.postgresql.util.PSQLException: Bad value for type int : >> \377\330\377\340\000 .... <blob data removed> >> at >> org.postgresql.jdbc2.AbstractJdbc2ResultSet.toInt(AbstractJdbc2ResultSet.java:2528) >> >> at > > > Postgresql maps Blob data to the oid datatype, not bytea. For bytea > data you should use getBytes() not getBlob. > > Kris Jurka > Thanks. It's actually being done within Hibernate so I don't have a great deal of control but I'll try using the binary type which works with bytea and hopefully will be ok. Rob