Java 执行mvn sql时出错:执行
我希望Maven执行sql文件,它生成的数据库模式稍后将在我的程序中使用。但它不起作用,可能是由“分隔符”引起的。当我执行“mvnsql:execute”时,它会打印Java 执行mvn sql时出错:执行,java,mysql,maven,Java,Mysql,Maven,我希望Maven执行sql文件,它生成的数据库模式稍后将在我的程序中使用。但它不起作用,可能是由“分隔符”引起的。当我执行“mvnsql:execute”时,它会打印 [ERROR] Failed to execute: DELIMITER $$ 这是我的pom.xml的一部分 <plugin> <groupId>org.codehaus.mojo</groupId> <artifa
[ERROR] Failed to execute: DELIMITER $$
这是我的pom.xml的一部分
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<version>1.5</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>init-schema</id>
<goals>
<goal>site</goal>
</goals>
<phase>deploy</phase>
</execution>
</executions>
<configuration>
<driver>com.mysql.jdbc.Driver</driver>
<username>root</username>
<password>root</password>
<url>jdbc:mysql://127.0.0.1:3306/?useUnicode=true&characterEncoding=UTF-8</url>
<autocommit>false</autocommit>
<srcFiles>
<srcFile>src/main/sql/jellyjolly-schema.sql</srcFile>
</srcFiles>
</configuration>
</plugin>
这是因为Maven调用的MySQL Java连接器不支持关键字“DELIMITER”。那么我如何解决它呢?您可以在
sql maven插件
配置中指定一个新的分隔符,如下所示:
<configuration>
<delimiter>$$</delimiter>
</configuration>
关于此配置参数的更多信息。阅读您的评论后,我认为最好的解决方案是一个。也就是说,只使用一个分隔符(最好是默认的,
;
),并使用sql maven插件
配置要求分隔符出现在它自己的行上实际上是一个分隔符
<configuration>
<delimiterType>row</delimiterType>
</configuration>
(归功于@)
您的触发器将如下所示:
CREATE TRIGGER delete_user
AFTER DELETE
ON jj_users
FOR EACH ROW
BEGIN
## delete the posts that belong to the user
DELETE FROM jj_blog_posts WHERE author_user_id=OLD.user_id; # this delimiter is ignored
END
; # this delimiter is recognized
如果你不想使用
行
除了sean的答案之外,另一种方法是去掉分隔符$$和$$,并在插件中使用分号以外的分隔符
例如,首先更改插件中的分隔符
<delimiter>;;</delimiter>
或者您可以使用其他东西作为插件中的分隔符,并更改触发器;;因此你为什么要使用这样一个奇怪的分隔符。通常的分隔符是“;”@khmarbaise,如果我使用分隔符“;”,“;”不能出现在declaim语句中。例如,“从jj_blog_帖子中删除,其中author_user_id=OLD.user_id;”不能以“;”结尾我同意可能有一个更优雅的解决方案。您可以从中获得灵感。如果sql的一部分使用分隔符;另一部分使用分隔符$$,如何处理?我不相信这是可能的,对不起。
<delimiter>;;</delimiter>
USE `jellyjolly_schema`;;
DROP TRIGGER IF EXISTS `jellyjolly_schema`.`delete_user`;;
USE `jellyjolly_schema`;;
CREATE TRIGGER delete_user
AFTER DELETE
ON jj_users
FOR EACH ROW
BEGIN
## delete the posts that belong to the user
DELETE FROM jj_blog_posts WHERE author_user_id=OLD.user_id;
END;;