2010-08-14 2 views
8

일부 잘못된 세미콜론으로 인해 구문 오류가 발생하는 코드가 있습니다. 이 명령 줄에서 실행중인 경우이를 구분 기호로 해결할 것이다. 안타깝게도 jdbc4 드라이버는 구분 기호를 인식하지 못합니다. 어쨌든 이걸 실행 시키려면?mysql jdbc 드라이버는 다중 문으로 트리거에서 구분 기호를 지원하지 않습니다.

delimiter | 
CREATE TRIGGER obs_update BEFORE UPDATE ON obs 
FOR EACH ROW 
BEGIN 
    IF OLD.voided = 0 AND NEW.voided = 1 THEN 
     DELETE FROM clinic_obs WHERE id = OLD.obs_id; 
    ELSE 
     UPDATE clinic_obs SET clinic_obs.revision_token = NOW() 
     WHERE NEW.obs_id = clinic_obs.id; 
    END IF; 
END; 
| 
delimiter ; 

답변

4

구분 기호는 SQL 클라이언트에 대한 명령입니다. JDBC에서는 구분 기호를 사용할 필요가 없습니다. 아래 예를 보여줍니다

import java.sql.*; 

public class TriggerExample { 

    public static void main(String args[]) { 

     String connectionURL = "jdbc:mysql://localhost:3306/test"; 
     Connection con = null; 

     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      con = DriverManager.getConnection(connectionURL, "login", 
        "password"); 
      Statement stmt = con.createStatement(); 
      stmt.execute("CREATE TRIGGER obs_update BEFORE UPDATE ON obs " 
        + "FOR EACH ROW " 
        + "BEGIN " 
        + "IF OLD.voided = 0 AND NEW.voided = 1 THEN " 
        + " DELETE FROM clinic_obs WHERE id = OLD.obs_id; " 
        + "ELSE " 
        + " UPDATE clinic_obs SET clinic_obs.revision_token = NOW() " 
        + " WHERE NEW.id = clinic_obs.id; " 
        + "END IF; " 
        + "END;"); 
      con.close(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (con != null) { 
       try { 
        con.close(); 
       } catch (SQLException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 
0

시도가 최종 END 단어 뒤에 세미콜론을 제거. 그래서 그것은 다음과 같습니다 :

delimiter | 
CREATE TRIGGER obs_update BEFORE UPDATE ON obs 
FOR EACH ROW 
BEGIN 
    IF OLD.voided = 0 AND NEW.voided = 1 THEN 
     DELETE FROM clinic_obs WHERE id = OLD.obs_id; 
    ELSE 
     UPDATE clinic_obs SET clinic_obs.revision_token = NOW() 
     WHERE NEW.obs_id = clinic_obs.id; 
    END IF; 
END| 

jdbc 드라이버를 사용하여 유사한 트리거/절차를 수행했기 때문에 작동합니다.

관련 문제