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

标签 mysql jdbc triggers

我有一些代码由于错位的分号而触发了语法错误。如果这是在命令行上运行,我会用分隔符解决这个问题。不幸的是,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/

相关文章:

postgresql - 将值传递给 PL/pgSQL 函数的语法

Mysql触发器不更新连接表

mysql - 选择前触发

php - Heroku 是否支持 PHP?

java - 如何在 Java 中捕获 ORA-28011 或 ORA-28002?

javascript - 如何正确格式化 PHP foreach 循环?

java - 数据库池 - 在 Spring3 MVC 中连接到 Mysql 数据库

java - 未实现 Postgres 错误方法 org.postgresql.jdbc.PgConnection.createClob()

PHP mysql 错误调用未定义的函数 mysql_connect()

mysql - 使用 SQL GROUP BY 时合并