Hi
I am learning transaction and isolation levels. I tried to use
read_committed in one thread and then in another thread insert some data
into a table. the reader thread is blocked and waits until the first thread
commit the transaction to complete the select statement. What I can not
understand is: shouldn't the second thread only read what is already
committed instead of waiting until the inserting thread finishes its job?
Inserted thread code:
[code]
String userName = "app";
String password = "app";
String url = "jdbc:derby://localhost:1527/sample";
Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
conn = DriverManager.getConnection(url, userName, password);
conn.setAutoCommit(false);
PreparedStatement st = conn.prepareStatement("insert into
APP.TABLE1(name, lastname) values('a','a')");
st.executeUpdate();
Thread.sleep(20000);
conn.commit();
[/code]
reader thread code:
[code]
String userName = "app";
String password = "app";
String url = "jdbc:derby://localhost:1527/sample";
Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
conn = DriverManager.getConnection(url, userName, password);
conn.setAutoCommit(false);
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
Statement st2 = conn.createStatement();
ResultSet rs = st2.executeQuery("select * from APP.TABLE1");
[/code]
also I tried and execute these code in two different application and the
result is the same. The reader application waits for almost 20 seconds
before it read the data.
--
View this message in context:
http://www.nabble.com/Second-thread-is-blocked-until-the-first-thread-commit-the-transaction%2C-I-can-not-understand-why...-tp24786526p24786526.html
Sent from the Apache Derby Users mailing list archive at Nabble.com.