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:

Previous
From: Dave Cramer
Date:
Subject: Re: setAutoCommit(false)
Next
From: Dave Cramer
Date:
Subject: Re: Problem with transactions