2010-08-14 28 views
8

tôi đã có một số mã kích hoạt lỗi cú pháp do một số dấu chấm phẩy bị đặt nhầm. nếu điều này đã được chạy trên dòng lệnh, tôi sẽ giải quyết điều này với một dấu phân cách. Thật không may, trình điều khiển jdbc4 dường như không nhận ra dấu phân tách. anyway để có được điều này để chạy?Trình điều khiển jdbc mysql không hỗ trợ dấu phân tách trong trình kích hoạt có nhiều câu lệnh

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 ; 

Trả lời

4

Dấu phân tách là lệnh cho khách hàng SQL. Không cần sử dụng dấu phân cách trong JDBC. Ví dụ dưới đây cho thấy nó:

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

Cố gắng loại bỏ các thư ruột kết bán sau chữ END thức. có vẻ như sau:

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| 

Nó sẽ hoạt động vì tôi đã thực hiện một quy trình/trình kích hoạt tương tự bằng trình điều khiển jdbc.

Các vấn đề liên quan