gpt4 book ai didi

mysql jdbc 驱动程序不支持具有多个语句的触发器中的定界符

转载 作者:可可西里 更新时间:2023-11-01 06:30:35 27 4
gpt4 key购买 nike

我有一些代码由于错位的分号而触发了语法错误。如果这是在命令行上运行,我会用分隔符解决这个问题。不幸的是,jdbc4 驱动程序似乎无法识别定界符。无论如何让它运行?

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 ;

最佳答案

定界符是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();
}
}
}
}
}

关于mysql jdbc 驱动程序不支持具有多个语句的触发器中的定界符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3481771/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com