2015-02-28 3 views
1

Я пытаюсь выполнить весь каталог файлов .SQL на Java.Создание хранимой процедуры из файла

Я изо всех сил пытаюсь выполнить хранимую процедуру. Я до сих пор нашел this (самое полезное), включая, к сожалению, мертвую ссылку. Я также загрузил Liquibase, но я не могу понять, как я должен использовать его для этой цели.

В моем текущем коде, я разделить файлы, включая процедуры в различные заявления:

(Заявления расщепляются в векторе [String] и выполняются в цикле)

Пример:

//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."); 

Вектор содержит четыре элемента (см. SQL-код #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 

Q: Может ли кто-нибудь сказать мне, если есть Exteral библиотека, я мог бы использовать, или как LiquiBase работает? Я не могу заставить его работать на JDBC-пути.

+0

Просто для того, чтобы понять, что вы разделили файл .sql на отдельные утверждения и затем выполнили их. Какую ошибку вы получаете? Какой вызов JDBC вы используете? Вот пример кода JDBC http://www.xyzws.com/javafaq/how-to-use-jdbc-java-to-dynamically-create-a-stored-procedure/171 – Mike

+0

Что вы подразумеваете под _ «Я могу 't заставить его работать JDBC-way "_ –

+0

Обновлен мой вопрос. – Blacktempel

ответ

0

Заявление DELIMITER \\ на самом деле не SQL - это команда, которая интерпретируется средством командной строки mysql (и, возможно, также их инструментом GUI), но если вы передадите его прямо в механизм выполнения, вы получите эта синтаксическая ошибка.

К сожалению, Liquibase использует ; в качестве разделителя операторов по умолчанию, поэтому трудно заставить эту работу работать с использованием файлов SQL и Liquibase. Я поставил запрос на растяжение, чтобы разрешить установку разделителя из командной строки Liquibase - см. https://github.com/liquibase/liquibase/pull/361.

Смежные вопросы