从java创建SQL函数会导致异常

时间:2016-03-17 11:17:19

标签: java mysql jdbc

我尝试使用Java中的JDBC创建数据库。

数据库和表的创建很容易,但是现在我需要创建函数,然后我需要触发器,并且我继续使用此函数作为例子来打击异常的墙:

USE ratercases;
DROP FUNCTION IF EXISTS `IMC`;
DELIMITER $$
CREATE FUNCTION `IMC` (altura INT,peso INT)
  RETURNS DOUBLE
BEGIN
  DECLARE AltM DOUBLE;
  DECLARE AltSqr DOUBLE;
  SET AltM=(altura/100);
  SET AltSqr=AltM*AltM;
  RETURN peso/AltSqr;
END $$
DELIMITER ;

如果我在MySQL Workbench上运行上面的脚本没有问题;但是从Java运行它会让我得到SQL语法错误异常。

我使用以下Java代码:

// ps is a SQL Statement; ratercases is the target Database;
ps.execute("USE ratercases;"
                + "DROP FUNCTION IF EXISTS `IMC`;"
                + " DELIMITER $$"
                + " CREATE FUNCTION `IMC` (altura INT,peso INT)"
                + " RETURNS DOUBLE"
                + " BEGIN"
                + " DECLARE AltM DOUBLE;"
                + " DECLARE AltSqr DOUBLE;"
                + " SET AltM=(altura/100);"
                + " SET AltSqr=AltM*AltM;"
                + " RETURN peso/AltSqr;"
                + " END $$"
                + " DELIMITER ;");
//

Java / SQL显然遇到了Delimiter $$ ...

的问题

任何人都可以启发我吗?

由于

1 个答案:

答案 0 :(得分:2)

另一种方法是直接连接到 ratercases 数据库,方法是在连接URL中指定它,然后为DROPCREATE执行两个单独的语句,避免要求完全使用DELIMITER

ps.execute("DROP FUNCTION IF EXISTS `IMC`");

ps.execute("CREATE FUNCTION `IMC` (altura INT,peso INT)"
           + " RETURNS DOUBLE"
           + " BEGIN"
           + " DECLARE AltM DOUBLE;"
           + " DECLARE AltSqr DOUBLE;"
           + " SET AltM=(altura/100);"
           + " SET AltSqr=AltM*AltM;"
           + " RETURN peso/AltSqr;");