2015-11-06 2 views
0

Я уже создал одну процедуру с именем SET, и я пытаюсь отправить значения через java, как это.Как вставить значения в БД с помощью процедуры

stmt.executeQuery("call set("+id+",'"+name+"','"+sal+"','"+dept+"')"); 

как имя, sal и отдел находятся в формате String.

, но я получаю ошибку.

проверить руководство, которое соответствует версии сервера MySQL для правильного синтаксиса использовать вблизи 'набор (12,' D ' '12', 'CSE')' в строке 1

+0

Это должно быть '{call ....}'. См. Учебник JDBC для получения дополнительной информации: http://docs.oracle.com/javase/tutorial/jdbc/basics/storedprocedures.html –

ответ

1

«установить» является reserve word in Mysql так что может быть проблема ваших неприятностей. Общий совет заключается в том, чтобы избежать резервных слов и значимо назвать ваши процедуры (например, setAccountRecrod).

Когда мне удалось создать процедуру с этим именем я должен назвать его сбежавшим именем (с задним клещом):

stmt.executeQuery("call `set`("+id+",'"+name+"','"+sal+"','"+dept+"')"); 

но предположила, что это лучше использовать prepareCall так:

callableStatement = dbConnection.prepareCall("call `set`(" + id + ",'" + 
    name + "','" + sal + "','" + dept + "')"); 
callableStatement.executeUpdate(); 

или даже лучше:

callableStatement = dbConnection.prepareCall("call `set`(?,?,?,?)"); 
callableStatement.setInt(1, id); 
callableStatement.setString(2, name); 
callableStatement.setString(3, sal); 
callableStatement.setString(4, dept); 
callableStatement.executeUpdate(); 

Все выше работал для меня в последней версии MariaDb, когда я создаю такую ​​процедуру:

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `set`; 

CREATE PROCEDURE `set` (IN id INT, name VARCHAR(25), sal VARCHAR(25), dept VARCHAR(25)) 
BEGIN 
SELECT VERSION(); 
END $$ 

DELIMITER ; 
+1

да. Спасибо чувак –

0

вы можете вызвать хранимую процедуру через CallableStatement, как показано here

Успехов

+0

не работает, все еще такая же ошибка –

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