以上 2 点都会保证不能脏读脏写,就是说不能得到另外一个事务修改没有提交的事务的修改后的数据。
用一个例子来解释一下
BaseTestCase
package test.transaction;
import java.sql.Connection;
import java.sql.DriverManager;
import junit.framework.TestCase;
public class BaseTestCase extends TestCase {
protected Connection conn = null;
private String user = null;
private String pwd = null;
private String url = null;
/**
* override super setup...
*/
protected void setUp() throws Exception {
super.setUp();
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
url = "jdbc:oracle:thin:@10.200.10.19:1521:aaaa";
user = "loocky";
pwd = "loocky";
try {
conn = DriverManager.getConnection(url, user, pwd);
} catch (Exception e) {
e.printStackTrace();
}
}
protected void tearDown() throws Exception {
super.tearDown();
try{
if(conn!=null){
if(!conn.isClosed()){
conn.close();
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(!conn.isClosed()){
conn.close();
}
}
}
}
TestTransaction0
package test.transaction;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class TestTransaction0 extends BaseTestCase {
protected void setUp() throws Exception {
super.setUp();
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void test0() {
try {
System.out.println(this.getClass().getName());
conn.setAutoCommit(false);
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
String sql1="update sys_dbinfo set item='bbb' where id =1" ;
PreparedStatement ps1= conn.prepareStatement(sql1);
ps1.executeUpdate();
ps1.close();
String sql2 ="select item from sys_dbinfo where id =1";
PreparedStatement ps2= conn.prepareStatement(sql2);
ResultSet rs2 = ps2.executeQuery();
rs2.next();
System.out.println(rs2.getString(1));
rs2.close();
ps2.close();
conn.commit();
System.out.println(this.getClass().getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}

