【发布时间】:2015-05-01 03:37:10
【问题描述】:
我正在尝试在 Java 中执行 .SQL 文件的整个目录。
我正在努力执行存储过程。遗憾的是,到目前为止,我已经找到了this(最有帮助的),包括一个死链接。我也下载了 liquibase,但我不知道应该如何使用它。
在我当前的代码中,我将包含过程的文件拆分为不同的语句:
(语句在 Vector[String] 中拆分并在 for 循环中执行)
例子:
//File f;
//Statement st;
Vector<String> vProcedure = getProcedureStatements(f, Charset.defaultCharset(), "//");
for (Iterator<String> itr = vProcedure.iterator(); itr.hasNext();)
st.execute(itr.next());
System.out.println(f.getName() + " - done executing.");
Vector 包含四个元素(参见 SQL-Code #SPLIT x)。
DROP PROCEDURE IF EXISTS `Add_Position`; #SPLIT 1
DELIMITER // #SPLIT 2
CREATE PROCEDURE `Add_Position`
(
IN iO_ID INT,
IN iCID INT,
IN iWID INT,
IN iA INT
)
BEGIN
#statements;
END
// #SPLIT 3
DELIMITER ; #SPLIT 4
Result 在尝试执行#SPLIT 2 时:
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 //' at line 1
问:谁能告诉我是否有可以使用的外部库,或者 liquibase 是如何工作的?我无法让它以 JDBC 方式工作。
【问题讨论】:
-
只是为了理解,您将 .sql 文件拆分为单独的语句,然后执行每个语句。你遇到了什么错误?您使用的是什么 JDBC 调用?这是一些示例 JDBC 代码xyzws.com/javafaq/…
-
“我无法让它以 JDBC 方式工作”是什么意思
-
更新了我的问题。
-
顺便说一句,这已在 16 小时前修复。我删除了所有分隔符语句并在“getProcedureStatements”中读入了整个过程语句。这样它在 JDBC 中执行。
标签: java mysql stored-procedures jdbc liquibase