隨筆-112  評(píng)論-73  文章-0  trackbacks-0
          groovy sql 事務(wù)
          def init = { servletContext -> Sql.metaClass.withTransaction = { Closure stmt -> cacheConnection(){ connection.autoCommit = false try { stmt().each { execute(it.query, it.params) } connection.commit() } catch ( e) { connection.rollback() throw e } finally { connection.autoCommit = true } } } } def destroy = { } } Then, you may invoke it in a service: def sql = new Sql(dataSource) Connection connection = sql.createConnection(); try{ def sql2 = new Sql(connection); sql2.withTransaction { [ [query:"insert into table values (?,?,?)", params:[p1, p2, p3]], [query:"insert into table2 values (?,?,?)", params:[p4, p5, p6]] ] } }finally{ if(sql.dataSource){ connection.close(); } } There is already a JIRA requesting this to be added to Groovy: http://jira.codehaus.org/browse/GROOVY-3158. Vote it if you find this useful.


          public void ttt(){
          Sql.metaClass.useTransaction = { Closure closure ->
          java.sql.Connection conn = null
          try { conn = createConnection();
          conn.autoCommit = false;
          Sql sql2 = new Sql( conn );
          closure(sql2);
          conn.commit();
          } catch (e) {
          if(conn != null)
          conn.rollback();
          e.printStackTrace();
          throw e
          } finally {
          if ( conn != null ) {
          conn.autoCommit = true
          if ( dataSource ) { conn.close()
          }
          }
          }
          }
          }




          posted on 2009-12-18 19:53 Libo 閱讀(981) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 中西区| 松溪县| 鹤山市| 田东县| 开封县| 德保县| 平罗县| 北宁市| 普宁市| 德江县| 孟州市| 志丹县| 乐都县| 申扎县| 小金县| 城口县| 堆龙德庆县| 中江县| 祁东县| 怀来县| 柏乡县| 淅川县| 承德县| 施秉县| 巴林右旗| 清水县| 美姑县| 金山区| 罗田县| 潮州市| 仲巴县| 鄂托克前旗| 彝良县| 教育| 台州市| 崇阳县| 德庆县| 织金县| 灵台县| 靖边县| 会东县|