2012-11-03 2 views
0

MySQL 트랜잭션 트랜잭션을 커밋하려고하지만 MySQLSyntaxErrorException이 발생합니다.MySQL 예외 : SQL 트랜잭션 실행

내가 사용하고있는 코드는 다음과 같습니다

implicit connection => 
     SQL(""" 
      start transaction; 
      insert into projects(id_user, name, description) values({idUser}, {name}, {description}); 
      set @last_id = last_insert_id(); 
      insert into assigned(id_user, id_project) values({idUser}, @last_id); 
      commit; 
     """) 
    .on('idUser -> idUser, 
     'name -> project.name, 
     'description -> project.description 
    ).execute() 

예외는 내가 얻을 : 나는 모든 Anorm과 그러한 문을 실행할 수 없다고 생각하기 시작하고

[MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'insert into projects(id_user, name, description) values(1, 'First inserted proje' at line 1] 

.

+0

삽입 쿼리로 구문 오류가 발생하지 않았습니까? –

+0

@VaibhavDesai 저는 전체 문장을'트랜잭션 시작하기 '로 축소했습니다. 커밋;과 같은 예외입니다. – Andrew

+0

트랜잭션을 시작하기 전에 auto-commit을 false로 설정 했습니까? 또한 트랜잭션 문을 방금 가져 왔을 때 어떤 오류가 발생합니까? –

답변

2

이렇게 트랜잭션을 사용할 수 없습니다. anorm은 단순히 기존 jdbc 라이브러리를 감싸는 래퍼라는 것을 이해해야합니다. 기본적으로 withConnectionSQL 사용하는 경우 :

DB.withConnection { conn => 
    SQL("... 
} 

귀하의 쿼리가 PreparedStatement를 사용하여 변환합니다. 의미 : ; 문자가 오류의 원인입니다.

따라서 트랜잭션을 사용하려면 anorm's mecanism을 사용해야합니다.

DB.withTransaction { conn => 
    SQL("... 
} 
+0

그리고 나서 나는 모두에 대해'SQL' 문을 사용하거나 각 문에 대해'SQL' 선언을 작성합니까? – Andrew

+0

그것은 귀하의 응용 프로그램에 따라 다릅니다. 동일한 쿼리를 여러 번 실행해야하는 경우 반복되는 쿼리를 작성하십시오. 그렇지 않으면 명령문마다 SQL 문을 사용하십시오. –