我希望Maven执行sql文件,它生成的数据库模式将在以后用于我的程序中。但它不起作用,可能是由'DELIMITER'造成的。当我执行 'MVN SQL:执行',它打印的是执行mvn sql时出错:执行
[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>
这里是我的SQL文件的一部分
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
$$
是这是因为关键字'DELIMITER'不受由Maven调用的MySQL Java连接器的支持。那我该如何解决呢?在此page
<configuration>
<delimiter>$$</delimiter>
</configuration>
更多关于此配置参数:
你为什么使用这样一个奇怪的分隔符。通常的分隔符是“;”。 – khmarbaise
@khmarbaise如果我使用分隔符';',';'不能出现在声明语句中。例如,'DELETE FROM jj_blog_posts WHERE author_user_id = OLD.user_id;'不能以';'结尾 – rAy
我同意这可能是一个更优雅的解决方案。你可以看看[这个问题](http://stackoverflow.com/questions/13072354/sql-maven-plugin-with-multiple-delimiters)的灵感。 –