Problem with transactions - Mailing list pgsql-jdbc
| From | Marcos Truchado |
|---|---|
| Subject | Problem with transactions |
| Date | |
| Msg-id | 40A27980.80404@telefonica.net Whole thread Raw |
| In response to | Re: setAutoCommit(false) (Dave Cramer <pg@fastcrypt.com>) |
| Responses |
Re: Problem with transactions
|
| List | pgsql-jdbc |
Hi:
this is normal or it's a bug?
please, rewrite the line 98 to fit your database:
DriverManager.getConnection("jdbc:postgresql://yourIp:yourPort/yourDataBaseName?charSet=yourCharSet",
"yourUser", "yourPassword");
import java.sql.*;
import java.io.IOException;
import javax.swing.JOptionPane;
class Problem {
public static void main(String [] arguments) {
Connection conn = null;
try {
conn = getConn();
Statement stat = conn.createStatement();
String sequenceTest = "CREATE SEQUENCE sequence_test";
String table1 = "CREATE TABLE test (id INTEGER DEFAULT NEXTVAL('sequence_test') NOT NULL, value VARCHAR(100))";
//create sequence and table for testing purposes
stat.executeUpdate(sequenceTest);
stat.executeUpdate(table1);
//let's go with the problem
boolean autoCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
String insert1 = "INSERT INTO test(value) VALUES('this will have id1')";
String insert2 = "INSERT INTO test(value) VALUES('this will have id2')";
String insert3 = "INSERT INTO test(value, other) VALUES('this will have id3', 'this will cause an error')";
//<=error
stat.executeUpdate(insert1);
stat.executeUpdate(insert2);
stat.executeUpdate(insert3);
conn.setAutoCommit(autoCommit);
} catch(SQLException e) {
try {
conn.rollback();
conn.close();
System.out.println("rollback done");
} catch(SQLException SQLe) {
e.printStackTrace();
SQLe.printStackTrace();
System.out.println("rollback isn't done :'(");
}
System.out.println("Error code: " + e.getErrorCode());
System.out.println("Error messague: " + e.getMessage());
System.out.println("Localized messague: " + e.getLocalizedMessage());
System.out.println("Description: " + e);
System.out.println();
System.out.println("<- ->");
System.out.println();
e.printStackTrace();
System.out.println();
System.out.println("<- ->");
System.out.println();
} catch(IOException ioe) {
ioe.printStackTrace();
System.out.println("Imput/output error");
}
try {
conn = getConn();
Statement stat = conn.createStatement();
String insert1 = "INSERT INTO test(value) VALUES('this will have id1')";
stat.executeUpdate(insert1);
stat.close();
PreparedStatement pstmt = conn.prepareStatement("SELECT CURRVAL('sequence_test') AS CURRVAL");
ResultSet rs = pstmt.executeQuery();
if (rs.first()) {
System.out.println("Current sequence value is: " + rs.getInt("CURRVAL"));
System.out.println("According with the code, rollback was called, so this new row should have 1");
} else {
System.out.println("FATAL");
System.out.println("FATAL");
System.out.println("FATAL");
System.out.println("cannot reach the sequence");
return;
}
rs.close();
pstmt.close();
conn.close();
} catch(SQLException e) {
e.printStackTrace();
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
public static Connection getConn() throws SQLException, IOException {
try {
Class.forName("org.postgresql.Driver").newInstance();
//return DriverManager.getConnection("jdbc:postgresql://yourIp:yourPort/yourDataBaseName?charSet=yourCharSet",
"yourUser","yourPassword");
} catch(ClassNotFoundException e) {
e.printStackTrace();
} catch(IllegalAccessException ee) {
ee.printStackTrace();
} catch(InstantiationException eee) {
eee.printStackTrace();
}
catch(SQLException e) {
JOptionPane.showMessageDialog(null,
"can't connect with database");
}
return null;
}
}
pgsql-jdbc by date: