private static String url = "jdbc:mysql://localhost:3306/test";
	private static String username = "root";
	private static String password = "";
	
	
	
	public static Connection  getConn() throws Exception {
		Class.forName("org.gjt.mm.mysql.Driver").newInstance();
		Connection con =  DriverManager.getConnection(url , username , password);
		return con;
	}

public static void demo3() throws Exception{ 
		
		Connection con1  = getConn();
		con1.setAutoCommit(false);
		con1.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);//设置事务的隔离级别
		String sql1 = "Select * from employee where salary=1000";
		Statement stmt1 = con1.createStatement();
		ResultSet rs1 = stmt1.executeQuery(sql1);
		while(rs1.next()){
			System.out.print(rs1.getInt(1) + " ");
			System.out.print(rs1.getString(2) + " ");
			System.out.println(rs1.getString(3));
		}
		stmt1.close();
		
		Connection con2  = getConn();
		con2.setAutoCommit(false);
		String sql2 = "insert into employee(name,salary) values(\"gigi\",1000)";
		Statement stmt2 = con2.createStatement();
		stmt2.executeUpdate(sql2);	
		con2.commit();
		stmt2.close();
		con2.close();
		
		System.out.println("===========================");
		Statement stmt11 = con1.createStatement();
		ResultSet rs11 = stmt11.executeQuery(sql1);
		while(rs11.next()){
			System.out.print(rs11.getInt(1) + " ");
			System.out.print(rs11.getString(2) + " ");
			System.out.println(rs11.getString(3));
		}
		stmt11.close();
		con1.commit();
		con1.close();
	}

	public static void main(String[] args) throws Exception {
		
		//demo1();
		//demo2();
		demo3();
	}


实际打印结果为:
1 gigi 1000
===========================
1 gigi 1000

预期的结果应该是:
1 gigi 1000
===========================
1 gigi 1000
2 gigi 1000

请高手 帮我看看这个代码.为啥隔离级别设置成ISOLATION_REPEATABLE_READ了,却不能幻像读
按照文档
ISOLATION_READ_UNCOMMITTED
ISOLATION_READ_COMMITTED
ISOLATION_REPEATABLE_READ 都是应该允许幻像读的
我用的是 mysql 的 InnoDB 存储引擎 .文档上说支持4个标准的事务隔离
评论
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论