RE: can't write a BLOB, 7.1.2

From: Joe Shevland <J(dot)Shevland(at)eclipsegroup(dot)com(dot)au>
To: "'Tom Lane'" <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Dejan Vucinic <hotdejan(at)hotmail(dot)com>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: RE: can't write a BLOB, 7.1.2
Date: 2001-07-11 23:13:46
Message-ID: C56487636E5CD4119B1E00D0B789098ADA2D08@MEL-EXCH1
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

This normally should work (calling con.setAutoCommit(false);) for large
objects. Are you using the latest JDBC driver or the one that came with
7.1.2?

Here's a standard kind of method I use to store a BLOB, this is against 7.1
RC1 with the JDBC source that came with it:

---
try {
con.setAutoCommit(false);
String sql = "UPDATE formfields SET mimetype = ?, fieldblob = ? " +
"WHERE fieldid = ?";
PreparedStatement ps = con.prepareStatement(sql);
int paramindex = 1;
ps.setString(paramindex++, image.getContentType());
ps.setBytes(paramindex++, image.getBytes());
ps.setInt(paramindex++, fieldid);
ps.executeUpdate();
ps.close();
con.commit();
} catch ( SQLException se ) {
log("Couldn't update field image data: "+se);
} finally {
try { con.setAutoCommit(true); } catch ( Exception ignored ) {}
...
}
---

Regards,
Joe

> -----Original Message-----
> From: Tom Lane [mailto:tgl(at)sss(dot)pgh(dot)pa(dot)us]
> Sent: Thursday, 12 July 2001 5:39 AM
> To: Dejan Vucinic
> Cc: pgsql-jdbc(at)postgresql(dot)org
> Subject: Re: [JDBC] can't write a BLOB, 7.1.2
>
>
> "Dejan Vucinic" <hotdejan(at)hotmail(dot)com> writes:
> >> From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
> >> Probably you are not wrapping the operation into a transaction
> >> (BEGIN/COMMIT). Large object descriptors are only good to
> the end of
> >> the current transaction.
>
> > I believe I am, the code looks like this:
>
> > connection.setAutoCommit(false);
> > insert = connection.prepareStatement(
> > "INSERT INTO FOO (A, B) VALUES (?, ?)");
> > insert.setString(1, somestring);
> > insert.setBytes(2, byte[] xx);
> > insert.executeUpdate();
> > connection.commit();
> > connection.setAutoCommit(true);
>
> I have no idea what that actually does at the database level.
> In particular, does the setAutoCommit(false) routine send a
> BEGIN, or does it only set some state that affects later operations?
> If there's not a BEGIN sent before the LO operations, they'll fail.
>
> You might try turning on query logging at the postmaster to see
> what requests are really being transmitted.
>
> regards, tom lane
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
>

Browse pgsql-jdbc by date

  From Date Subject
Next Message Bruce Momjian 2001-07-11 23:49:06 Re: vacuum and 24/7 uptime
Previous Message Bruce Momjian 2001-07-11 22:06:16 Re: vacuum and 24/7 uptime