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
>
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 |