我已經創建了一個名爲SET的過程,我試圖通過java向它發送值,就像這樣。如何使用過程將值插入到數據庫中
stmt.executeQuery("call set("+id+",'"+name+"','"+sal+"','"+dept+"')");
作爲名稱,sal和dept是以字符串格式。
但我得到錯誤。
檢查對應於您的MySQL服務器版本正確的語法手冊使用近 '設置(12,' d ' '12', 'CSE')' 在1號線
我已經創建了一個名爲SET的過程,我試圖通過java向它發送值,就像這樣。如何使用過程將值插入到數據庫中
stmt.executeQuery("call set("+id+",'"+name+"','"+sal+"','"+dept+"')");
作爲名稱,sal和dept是以字符串格式。
但我得到錯誤。
檢查對應於您的MySQL服務器版本正確的語法手冊使用近 '設置(12,' d ' '12', 'CSE')' 在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 ;
是的。謝啦 –
它應該是「{call ....}」。有關詳細信息,請參閱JDBC教程:http://docs.oracle.com/javase/tutorial/jdbc/basics/storedprocedures.html –