import java.sql.* ; import java.io.* ; import java.util.* ; /** * Test JDBC transaction/connection stuff. In particular isolation levels. */ class TxnIsolation { public static void main(String[] args) { try { // ---------------- MySql driver ----------------- // -classpath .:/usr/java/mysql-connector-java-2.0.14/mysql-connector-java-2.0.14-bin.jar // RH9: -classpath .:/home/dave/mysql-connector-java-3.0.8-stable/mysql-connector-java-3.0.8-stable-bin.jar //Class.forName("com.mysql.jdbc.Driver") ; //Connection conn = DriverManager.getConnection("jdbc:mysql:///test", "dave", "") ; //String innodb = " TYPE=INNODB" ; // --------------- postgres 7.3.2 distribution JDBC2 driver linked as /usr/java/postgresql-jdbc.jar // -classpath .:/usr/java/postgresql-jdbc.jar Class.forName("org.postgresql.Driver") ; Connection conn = DriverManager.getConnection("jdbc:postgresql:test", "dave", "") ; String innodb = "" ; // Here we go. // Metadata DatabaseMetaData md = conn.getMetaData() ; System.out.println("supportsTransactions(): " + md.supportsTransactions()) ; System.out.println("Default transaction isolation is " + md.getDefaultTransactionIsolation()) ; System.out.println("supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_UNCOMMITTED): " + md.supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_UNCOMMITTED)) ; System.out.println("supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_COMMITTED): " + md.supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_COMMITTED)) ; System.out.println("supportsTransactionIsolationLevel(Connection.TRANSACTION_REPEATABLE_READ): " + md.supportsTransactionIsolationLevel(Connection.TRANSACTION_REPEATABLE_READ)) ; System.out.println("supportsTransactionIsolationLevel(Connection.TRANSACTION_SERIALIZABLE): " + md.supportsTransactionIsolationLevel(Connection.TRANSACTION_SERIALIZABLE)) ; // transactionIsolation // Theoretically important to call BEFORE setAutoCommit System.out.println("Current transaction isolation is " + conn.getTransactionIsolation()) ; conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE) ; System.out.println("Transaction isolation after setting to TRANSACTION_SERIALIZABLE is " + conn.getTransactionIsolation()) ; if (conn.getTransactionIsolation() != Connection.TRANSACTION_SERIALIZABLE) System.out.println("^^^^^^^^^^^^^^^^^^^^ HAVE A PROBLEM ^^^^^^^^^^^^^^^^^^^^") ; // autoCommit System.out.println("Current auto commit is " + conn.getAutoCommit()) ; conn.setAutoCommit(false) ; System.out.println("After settting auto commit to false, it is " + conn.getAutoCommit()) ; System.out.println("Transaction isolation after setAutoCommit() is " + conn.getTransactionIsolation()) ; // readOnly System.out.println("Current connection readonly status is " + conn.isReadOnly()) ; conn.setReadOnly(true) ; System.out.println("Connection readonly after setting it to be readonly is " + conn.isReadOnly()) ; } catch (Exception e) { e.printStackTrace() ; } } // main() }