2011-07-18 16 views
3

使用下面的爲什麼不用groovy和SqlException的事務回滾?

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()) 
} 

第二個執行會失敗,但是第一次插入不回滾。我在這裏做錯了什麼?

回答

6

你不顯示錶的定義;也許這些是MyISAM,因此不支持交易?

+0

謝謝! GTest是innoDB,但事件表確實是MyISAM。 – mosgjig

0

請參閱我的答案在這裏這個問題:

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

不完全匹配您的例子,但有可能在有東西給你或他人。我知道這是一箇舊帖子,但它似乎是Groovy Sql對象用戶中的一個常見問題。