我想在运行我的java程序时更新所有的SP(如果它不是好的做法并不重要)。 由于我使用的是Hibernate 4.3.2.Final,我试图避免为MySQL编写自己的SQL执行器。 所以我试图在我的hibernate.cfg.xml中使用hibernate.hbm2ddl.import_files。 它得到了脚本,但它无法解析它。我试过
<property name="hibernate.hbm2ddl.import_files">/Database/stored_procedures/load.sql</property>
<property name="hibernate.hbm2ddl.import_files_sql_extractor">org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor</property>
但我得到
org.hibernate.tool.hbm2ddl.ImportScriptException: Error during statement execution (file: '/Database/stored_procedures/load.sql'): DELIMITER $$
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$
SP sql文件在MySQL上运行良好(尝试多次),它类似于:
DROP PROCEDURE IF EXISTS ebull.`load_friends`;
DELIMITER $$
CREATE PROCEDURE ebull.`load_friends`(
IN transactionId BIGINT,
IN chunk INT
)
BEGIN
...sql queries and stuff....
END
$$
DELIMITER ;
我认为分隔符有问题,但我不知道如何避免它们,因为它是存储过程定义。 我开始认为这是不可能的。有什么想法吗?
答案 0 :(得分:0)
在Java中,您无需在SQL脚本中使用基于Delimiter
的语法来创建存储过程。修改您的SQL脚本文件以删除DELIMITER ...
部分并从JAVA运行其余的过程代码。
参考: Creating Stored Procedure in MySQL with SQL Scripts or JDBC API