mysql jdbc driver does not support delimiters in triggers with multiple statements

前端 未结 2 1963
隐瞒了意图╮
隐瞒了意图╮ 2020-12-11 16:27

i\'ve got some code that is triggering a syntax error because of some misplaced semicolons. if this was running on the command line, i\'d solve this with a delimiter. unfort

相关标签:
2条回答
  • 2020-12-11 16:47

    Try removing the semi colon after the final END word. so it looks like this:

    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|
    

    It should work because I have done a similar trigger/procedure using jdbc driver.

    0 讨论(0)
  • 2020-12-11 17:12

    Delimiter is a command for SQL client. There is no need to use delimiter in JDBC. Example below shows it:

    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 讨论(0)
提交回复
热议问题