gpt4 book ai didi

MySQL 和在 Hibernate 启动时导入存储过程

转载 作者:行者123 更新时间:2023-11-30 23:04:27 24 4
gpt4 key购买 nike

我想在运行我的 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 ;

我认为分隔符有问题,但我不知道如何避免它们,因为它是一个存储过程定义。我开始认为这是不可能的。有什么想法吗?

最佳答案

在 Java 中,您不需要在 SQL 脚本中使用基于 Delimiter 的语法来创建存储过程。修改您的 SQL 脚本文件以删除 DELIMITER ... 部分并从 JAVA 运行其余过程代码。

引用: Creating Stored Procedure in MySQL with SQL Scripts or JDBC API

关于MySQL 和在 Hibernate 启动时导入存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22440943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com