2

MavenにSQLファイルを実行させたいのですが、Mavenが生成するデータベーススキーマは後でプログラムで使用されます。しかし、それは機能しません。おそらく「DELIMITER」が原因です。'mvn sql:execute'を実行すると、次のように出力されます。

[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&amp;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によって呼び出されるMySQLJavaコネクタでサポートされていないためです。では、どうすればそれを解決できますか?

4

3 に答える 3

2

あなたのコメントを読んだ後、私は最良の解決策はここで受け入れられたものであると信じています。つまり、1つの区切り文字(できればデフォルト;)のみを使用し、sql-maven-plugin構成を使用して、実際に区切り文字になるように独自の行で区切り文字を使用するように要求します。


    <configuration>
      <delimiterType>row</delimiterType>
    </configuration>

(@ Zhekaへのクレジット)

トリガーは次のようになります。

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
于 2013-01-16T13:47:06.127 に答える
0

sql-maven-plugin次のように、構成で新しい区切り文字を指定できます。


   <configuration>
     <delimiter>$$</delimiter>
   </configuration>

この構成パラメーターの詳細については、このページを参照してください。

于 2013-01-16T13:00:28.747 に答える
0

ショーンの答え以外に別の方法を使用したくない場合<delimiterType>row</delimiterType>は、DELIMITER $$と$$を削除し、プラグインでセミコロン以外の区切り文字を使用することです。

まず、プラグインの区切り文字を変更します。たとえば、

<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;;

または、プラグインの区切り文字として他のものを使用して、トリガーを変更することもできます;; によると

于 2014-12-28T23:52:01.767 に答える