隨筆-112  評論-73  文章-0  trackbacks-0
          groovy sql 事務
          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 閱讀(977) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 丽江市| 乡宁县| 满洲里市| 黄浦区| 夏河县| 房产| 密云县| 灵宝市| 天祝| 卢湾区| 新乡市| 海盐县| 建德市| 库伦旗| 革吉县| 胶州市| 大安市| 广安市| 崇明县| 威远县| 松桃| 台山市| 房山区| 扶余县| 婺源县| 开江县| 浪卡子县| 周口市| 南岸区| 北川| 乌审旗| 吴江市| 衡阳县| 安塞县| 北辰区| 碌曲县| 朝阳区| 文山县| 全椒县| 高碑店市| 拜城县|