近来需要用groovy写一个数据库操作相关,需要用到事务,
下面我简单的写了一个小样子看看事务支持情况,似乎不乍支持事务,请达人指点一下:
import groovy.sql.Sql;def sqlConnection = Sql.newInstance("jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=GBK", "user",
                     "java", "com.mysql.jdbc.Driver").getConnection();sqlConnection.setAutoCommit(false);
def sql = new Sql(sqlConnection);sql.eachRow("select * from accout", { println it.ID + "-" +it.UserName + "-" + it.Password } );
//注:在test数据库里有一个accout表(ID,UserName, Password), ID:autoincrement,primary key
//@1 
sql.execute('update accout set Password=? Where UserName=?',['test','java_1']);sql.eachRow("select * from accout", { println it.ID + "-" +it.UserName + "-" + it.Password } );
//@2
sqlConnection.commit();
println sql.getConnection();//结果是false;sql.eachRow("select * from accout", { println it.ID + "-" +it.UserName + "-" + it.Password } );
//@3结果 @2处结果与@3处结果是一样的,与@1处显示的结果差异就是update效果区别,所以本人简单的认为groovy应该不支持事务哪位达人指点一下,groovy真的不支持事务吗?

解决方案 »

  1.   

    @2 和 @3 结果应该是一样的,因为在 @2和@3之前就执行了 update 操作,事物是按 session 隔离开的,在未提交事物之前,从别的 session 进来看到的结果就是不一样的。同一个会话,即使没有提交,查询到的也是改变后的结果。试着用一个客户端工具,如 Oracle 用 sqlplus,在一个窗口中更新记录后,接着查询就是改变后的记录,这时候打开另一个 sqlplus 窗口,查询到的是改变前的记录,第一个窗口提交后,两边的记录就是一样的了。