2015-11-06 72 views
0

我已經創建了一個名爲SET的過程,我試圖通過java向它發送值,就像這樣。如何使用過程將值插入到數據庫中

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

作爲名稱,sal和dept是以字符串格式。

但我得到錯誤。

檢查對應於您的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

不工作仍相同錯誤 –

相關問題