我已经创建了一个名为SET的过程,我试图通过java向它发送值,就像这样。
stmt.executeQuery("call set("+id+",'"+name+"','"+sal+"','"+dept+"')");
作为名称,sal和dept采用String格式。
但是我收到了错误。
检查与您的MySQL服务器版本对应的手册,以便在第1行的'set(12,'D','12','cse')附近使用正确的语法
答案 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
所示 祝你好运