1 5 package org.h2.test.jdbc; 6 7 import java.sql.*; 8 9 import org.h2.test.TestBase; 10 11 public class TestTransactionIsolation extends TestBase { 12 13 Connection conn1, conn2; 14 15 public void test() throws Exception { 16 deleteDb("transactionIsolation"); 17 conn1 = getConnection("transactionIsolation"); 18 check(conn1.getTransactionIsolation(), Connection.TRANSACTION_SERIALIZABLE); 19 conn1.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED); 20 check(conn1.getTransactionIsolation(), Connection.TRANSACTION_READ_UNCOMMITTED); 21 checkSingleValue(conn1.createStatement(), "CALL LOCK_MODE()", 0); 22 conn1.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); 23 checkSingleValue(conn1.createStatement(), "CALL LOCK_MODE()", 3); 24 check(conn1.getTransactionIsolation(), Connection.TRANSACTION_READ_COMMITTED); 25 conn1.createStatement().execute("SET LOCK_MODE 1"); 26 check(conn1.getTransactionIsolation(), Connection.TRANSACTION_SERIALIZABLE); 27 conn1.createStatement().execute("CREATE TABLE TEST(ID INT)"); 28 conn1.createStatement().execute("INSERT INTO TEST VALUES(1)"); 29 conn1.setAutoCommit(false); 30 31 conn2 = getConnection("transactionIsolation"); 32 conn2.setAutoCommit(false); 33 34 conn1.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); 35 36 checkSingleValue(conn1.createStatement(), "SELECT * FROM TEST", 1); 38 checkSingleValue(conn2.createStatement(), "SELECT * FROM TEST", 1); 39 conn1.commit(); 40 conn2.commit(); 41 42 conn1.createStatement().executeUpdate("UPDATE TEST SET ID=2"); 44 try { 45 checkSingleValue(conn2.createStatement(), "SELECT * FROM TEST", 1); 46 error("Expected lock timeout"); 47 } catch(SQLException e) { 48 checkNotGeneralException(e); 49 } 50 conn1.commit(); 51 conn2.commit(); 52 53 conn1.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); 54 55 checkSingleValue(conn1.createStatement(), "SELECT * FROM TEST", 2); 57 conn2.createStatement().executeUpdate("UPDATE TEST SET ID=3"); 58 conn2.commit(); 59 checkSingleValue(conn1.createStatement(), "SELECT * FROM TEST", 3); 60 conn1.commit(); 61 62 checkSingleValue(conn1.createStatement(), "SELECT * FROM TEST", 3); 64 checkSingleValue(conn2.createStatement(), "SELECT * FROM TEST", 3); 65 conn2.createStatement().executeUpdate("UPDATE TEST SET ID=4"); 66 try { 67 conn1.createStatement().executeUpdate("DELETE FROM TEST"); 68 error("Expected lock timeout"); 69 } catch(SQLException e) { 70 checkNotGeneralException(e); 71 } 72 conn2.commit(); 73 conn1.commit(); 74 checkSingleValue(conn1.createStatement(), "SELECT * FROM TEST", 4); 75 checkSingleValue(conn2.createStatement(), "SELECT * FROM TEST", 4); 76 77 conn1.close(); 78 conn2.close(); 79 } 80 81 } 82 | Popular Tags |