浏览 1508 次
锁定老帖子 主题:请教高手关于事务隔离的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-03-17
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个标准的事务隔离 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |