0

私は MySQL データベースを使用しており、いくつかの手順を書いています。これらのプロシージャを spring jdbc で作成しようとすると、これらのプロシージャが既に存在するというエラー メッセージが表示されます。昔ながらの方法で DriverManager を接続すると、PreparedStatement を作成して実行すると、すべて正常に動作します。なぜこれが起こっているのか誰にも分かりますか?

ここでコードで私がやっていること

...
connection = new JdbcTemplate(dataSource);
...
for(String sql: sqlScript.split( "(;)" ) ){
    connection.execute(sql.trim());
}

これにより、パラメーターとして指定したプロシージャーが既に存在するという SQL-Exception が発生します。しかし、これに対して前のコード スニペットを交換すると、次のようになります。

for(final String sql: sqlScript.split( "(;/)" ) ) {
     if (sql.trim().length() > 0)
        try {
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test?"
                                                                    + "user=root" );
            PreparedStatement ps =
            conn.prepareCall(sql);
            ps.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }
}

すべてが正常に動作します...

誰かがここで何が間違っているかを知っていればいいのですが...

すでに存在する私のプロシージャの少なくとも1つ...おそらくあなたのデータベースにも...

create procedure insertUser(
    in p_firstname varchar(50),
    in p_lastname varchar(50),
    in p_username varchar(25)
)
  begin
    declare l_username varchar(25);
    select username into l_username
        from movielist.user where username = p_username;
    if l_username is null then
        insert into movielist.User (firstname, lastname, username) values
        (p_firstname, p_lastname, p_username);
    end if;
  end;/
4

0 に答える 0