KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > h2 > test > jdbc > TestTransactionIsolation


1 /*
2  * Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
3  * Initial Developer: H2 Group
4  */

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 JavaDoc {
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         // serializable: just reading
37
checkSingleValue(conn1.createStatement(), "SELECT * FROM TEST", 1);
38         checkSingleValue(conn2.createStatement(), "SELECT * FROM TEST", 1);
39         conn1.commit();
40         conn2.commit();
41         
42         // serializable: write lock
43
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         // read-committed: #1 read, #2 update, #1 read again
56
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         // read-committed: #1 read, #2 read, #2 update, #1 delete
63
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