为什么不在SqlException上使用事务回滚进行groovy?

时间:2011-07-18 20:06:55

标签: mysql groovy transactions

使用以下

import groovy.sql.Sql
def sql = Sql.newInstance("jdbc:mysql://localhost:3306/eventDb", "user",
        "pwd", "com.mysql.jdbc.Driver")

def sqlInsert = "INSERT INTO GTEST (EVENTID,TSTAMP,USER_ID,USER_FIRST_NAME) VALUES (?,?,?,?)"
def sqlParams = ['EVENTID':0, 'TSTAMP':'','USER_ID':'janew','USER_FIRST_NAME':'janewithaverylongnamesothatitdoesntfitwell']
sqlParams['TSTAMP'] = new Date()

sql.withTransaction {stmt ->
    def eventId = sql.executeInsert("INSERT INTO EVENTS (LOGID,TSTAMP) VALUES (2,CURRENT_TIMESTAMP)")
    sqlParams['EVENTID'] = eventId [0][0]
    sql.executeInsert(sqlInsert, sqlParams.values().toList())
}

第二次执行将失败,但第一次插入不会回滚。我在这做错了什么?

2 个答案:

答案 0 :(得分:6)

您没有显示表格的定义;也许那些是MyISAM,因此不支持交易?

答案 1 :(得分:0)

请在此处查看我对此问题的回答:

https://stackoverflow.com/a/16863373/1216686

与您的示例不完全匹配,但您或其他人可能会有某些内容。我知道这是一个旧帖子,但它似乎是Groovy Sql对象用户中的常见问题。