The use of Connection.setAutoCommit(false) will not work with batch mode.
The following is a patch to properly fix up the Statement.java (jdbc2):
*** Statement.java.orig Fri Feb 16 11:45:00 2001
--- Statement.java Wed Jan 9 22:40:34 2002
***************
*** 377,389 ****
int size=batch.size();
int[] result=new int[size];
int i=0;
! this.execute("begin"); // PTM: check this when autoCommit is false
try {
for(i=0;i<size;i++)
result[i]=this.executeUpdate((String)batch.elementAt(i));
! this.execute("commit"); // PTM: check this
} catch(SQLException e) {
! this.execute("abort"); // PTM: check this
throw new PSQLException("postgresql.stat.batch.error",new
Integer(i),batch.elementAt(i));
}
return result;
--- 377,396 ----
int size=batch.size();
int[] result=new int[size];
int i=0;
!
! // Modified by Ed Yu <ekyu@asgnet.psc.sc.edu>
! // We want to use a transaction even if autoCommit is true which
! // is the default for JDBC.
! if (connection.getAutoCommit())
! this.execute("begin");
try {
for(i=0;i<size;i++)
result[i]=this.executeUpdate((String)batch.elementAt(i));
! // If autoCommit is true, then commits
! if (connection.getAutoCommit())
! this.execute("commit");
} catch(SQLException e) {
! this.execute("abort"); // This is ok since transaction is always
on
throw new PSQLException("postgresql.stat.batch.error",new
Integer(i),batch.elementAt(i));
}
return result;