有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在尝试使用Java中的JDBC创建一个数据库

DB和表的创建很容易,但是现在我需要创建函数,然后创建触发器,我不断地遇到异常,例如这个函数:

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显然在分隔符$$方面有问题

谁能启发我吗

谢谢


共 (1) 个答案

  1. # 1 楼答案

    另一种方法是,通过在连接URL中指定ratercases数据库,直接连接到该数据库,然后为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;");