Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在mysql5.5上通过JDBC创建触发器时出错_Java_Mysql_Jdbc_Triggers - Fatal编程技术网

Java 在mysql5.5上通过JDBC创建触发器时出错

Java 在mysql5.5上通过JDBC创建触发器时出错,java,mysql,jdbc,triggers,Java,Mysql,Jdbc,Triggers,这是我的代码: triggerBuilder.append("DROP TRIGGER IF EXISTS `insert_associated_inquiry`; "); triggerBuilder.append(" DELIMITER %% "); triggerBuilder.append(" CREATE TRIGGER insert_associated_inquiry BEFORE UPDATE ON inquiry "); triggerBuilder.append(" FOR

这是我的代码:

triggerBuilder.append("DROP TRIGGER IF EXISTS `insert_associated_inquiry`; ");
triggerBuilder.append(" DELIMITER %% ");

triggerBuilder.append(" CREATE TRIGGER insert_associated_inquiry BEFORE UPDATE ON inquiry ");
triggerBuilder.append(" FOR EACH ROW Begin ");    

triggerBuilder.append(" insert into associated_inquiries(inquiry_id , subject , content , inquiry_date , preferred_date ) " );
triggerBuilder.append("values");
        triggerBuilder.append(" ( " );
            triggerBuilder.append(" OLD.id , ");
            triggerBuilder.append(" OLD.subject , " );
            triggerBuilder.append(" OLD.content , " );
            triggerBuilder.append(" OLD.created_on , " );
            triggerBuilder.append(" OLD.preffered_date " );
        triggerBuilder.append(" ) ; ");

triggerBuilder.append(" END %% ");

triggerBuilder.append(" DELIMITER ; ");

con.createStatement().execute(triggerBuilder.toString());
这是抛出的错误:

 com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax;
 check the manual that corresponds to your MySQL server version for the right 
 syntax to use near 'DELIMITER %%  CREATE TRIGGER insert_associated_inquiry 
 BEFORE UPDATE ON inquiry ' at line 1
此错误的原因和解决方案是什么。
请帮助。谢谢。

不要在JDBC和MySQL中使用分隔符。分隔符仅由MySQL控制台使用,以便它可以告诉您正在键入的触发器、存储过程等何时结束。在JDBC中,您将整个SQL字符串放在一起,然后将其发送到数据库。因为您可以控制SQL何时发送到数据库,所以不需要使用分隔符

我从代码中删除了两行
分隔符和
%%
分隔符,并分别向数据库发送了
DROP TRIGGER
命令。我留下的代码如下:

con.createStatement().execute(“如果存在“插入相关的查询”则删除触发器”);
追加(“在查询更新之前创建触发器插入相关查询”);
追加(“对于每行开始”);
追加(“插入相关的查询(查询id、主题、内容、查询日期、首选日期)”;
triggerBuilder.append(“值”);
triggerBuilder.append(“”);
triggerBuilder.append(“OLD.id,”);
triggerBuilder.append(“OLD.subject,”);
附加(“OLD.content,”);
附加(“OLD.created_on,”);
triggerBuilder.append(“OLD.prefered_date”);
triggerBuilder.append(“);”;
triggerBuilder.append(“结束”);
con.createStatement().execute(triggerBuilder.toString());

这段代码似乎可以工作,因为无论触发器是否已经存在,我都可以毫无错误地运行这段代码。如果触发器以前不存在,那么它是创建的。

不要在JDBC和MySQL中使用分隔符。分隔符仅由MySQL控制台使用,以便它可以告诉您正在键入的触发器、存储过程等何时结束。在JDBC中,您将整个SQL字符串放在一起,然后将其发送到数据库。因为您可以控制SQL何时发送到数据库,所以不需要使用分隔符

我从代码中删除了两行
分隔符和
%%
分隔符,并分别向数据库发送了
DROP TRIGGER
命令。我留下的代码如下:

con.createStatement().execute(“如果存在“插入相关的查询”则删除触发器”);
追加(“在查询更新之前创建触发器插入相关查询”);
追加(“对于每行开始”);
追加(“插入相关的查询(查询id、主题、内容、查询日期、首选日期)”;
triggerBuilder.append(“值”);
triggerBuilder.append(“”);
triggerBuilder.append(“OLD.id,”);
triggerBuilder.append(“OLD.subject,”);
附加(“OLD.content,”);
附加(“OLD.created_on,”);
triggerBuilder.append(“OLD.prefered_date”);
triggerBuilder.append(“);”;
triggerBuilder.append(“结束”);
con.createStatement().execute(triggerBuilder.toString());

这段代码似乎可以工作,因为无论触发器是否已经存在,我都可以毫无错误地运行这段代码。如果触发器以前不存在,那么它是创建的。

原因是“delimiter”不是mysql标准的一部分,只需删除delimiter语句,代码就可以工作。

原因是“delimiter”不是mysql标准的一部分,只需删除分隔符语句,代码就可以工作。

如果使用另一个分隔符字符串,是否会出现相同的错误?(如
$$
/
)@Jocelyn:是的,我收到了相同的错误。可能的重复如果使用另一个分隔符字符串,您会收到相同的错误吗?(比如
$$
/
)@Jocelyn:是的,我也遇到了同样的错误。可能是重复的