当设置jdbc事务自动提交为false时,且事务没有提交,在数据库里查找是不会发现变化的,但是像jdbc中的一些方法如executeUpdate、executeQuery是会返回结果的。下面一个例子,同一事务做了两次更新,会相互影响的,但是只要没提交,数据库中是不会发生变化的

package x.y.transaction;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.junit.Test;

import junit.framework.TestCase;

public class TransTest extends TestCase {
 
 private Connection con = null;
 @Override
 public void setUp(){
  try {
   Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
   con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:test", "h", "1");
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 @Test
 public void testUpdate(){
//  assertNotNull(con);
  PreparedStatement ps = null;
  try {
   con.setAutoCommit(false);
    ps = con.prepareStatement("update person set id=? where id=?");
   ps.setInt(1, 3);
   ps.setInt(2, 1);
   int rows = ps.executeUpdate();
   System.out.println("rows:"+rows);//注意事务没有提交
  } catch (SQLException e) {
   e.printStackTrace();
   
  }finally{
   try {
    if(ps != null){
     ps.close();
    }
   } catch (SQLException e) {
    e.printStackTrace();
   }
  }
  
 }
 
 @Test
 public void testTwoUpdates(){
  testUpdate();//输出1
  testUpdate();//输出0

}