2016-03-17 2 views
0

Я пытаюсь создать базу данных с помощью JDBC с Java.Создание функции SQL из java вызывает Исключение

БД и создание Таблица идет легко, однако теперь мне нужно создать функции и позже триггер, и я держать удар в стену исключений с помощью этой функции, как, например:

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, очевидно, возникают проблемы с Разделителем $$ ...

Может кто-нибудь просветить меня?

Благодаря

ответ

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