我尝试使用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 $$ ...
的问题任何人都可以启发我吗?
由于
答案 0 :(得分:2)
另一种方法是直接连接到 ratercases 数据库,方法是在连接URL中指定它,然后为DROP
和CREATE
执行两个单独的语句,避免要求完全使用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;");