如何使用过程将值插入DB

时间:2015-11-06 06:10:13

标签: java mysql stored-procedures jdbc

我已经创建了一个名为SET的过程,我试图通过java向它发送值,就像这样。

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

作为名称,sal和dept采用String格式。

但是我收到了错误。

  

检查与您的MySQL服务器版本对应的手册,以便在第1行的'set(12,'D','12','cse')附近使用正确的语法

2 个答案:

答案 0 :(得分: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

所示 祝你好运