2010-08-14 24 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驅動程序做了類似的觸發器/過程。

相關問題