2016-12-21 59 views
0

我正在嘗試使用java調用存儲過程。當使用java調用過程時顯示參數編號2不是OUT參數

我是存儲過程的初學者。 所以試圖同第一mysql中端

mysql> delimiter // 
mysql> create procedure get_EmployeeName(IN cust_id INT,OUT cust_name varchar(20)) 
    -> begin 
    -> select name into cust_name from CUSTOMERS where id = cust_id; 
    -> end // 
Query OK, 0 rows affected (0.11 sec) 

mysql> delimiter ; 
mysql> call get_EmployeeName(1,@cust_name); 
Query OK, 1 row affected (0.08 sec) 
mysql> select @cust_name; 
+------------+ 
| @cust_name | 
+------------+ 
| A   | 
+------------+ 
1 row in set (0.01 sec) 

我能夠得到的輸出。

現在嘗試使用Java。

CREATE PROCEDURE語句

stmt.execute("create procedure mydb.WhoAreThey(IN id INT, OUT name VARCHAR(20)) begin select Name into name from employees where EmployeeID = id; end"); 

過程調用

不知道如果我的過程調用是對還是錯

 String IN = "1000"; 
     cs = con.prepareCall("{call WhoAreThey(?,?)}"); 
     cs.setString(1, IN); 
     cs.registerOutParameter(2, Types.VARCHAR); 
     cs.execute(); 

上面的調用提供了一個SQLException 「的SQLException:參數號2不是OUT參數「

UPDATE

通過調用 「CS = con.prepareCall工作(」{調用mydb.WhoAreThey(,)?} 「);」

但是當我做了選擇@名稱 ..它顯示「空」。

我希望我出來爲「戴維·沃克」從員工表作爲僱員是1000

mysql> select * from employees; 
+------------+--------------+--------+---------------------+ 
| EmployeeID | Name   | Office | CreateTime   | 
+------------+--------------+--------+---------------------+ 
|  1000 | David Walker | HQ101 | 2016-12-21 13:00:37 | 
|  1001 | Paul Martin | HQ101 | 2016-12-21 13:00:37 | 
+------------+--------------+--------+---------------------+ 
2 rows in set (0.00 sec) 

我在一個錯誤的方式檢查(選擇@name)

+1

您確定存儲過程是否已創建? – shmosel

+0

@shmosel:是的,它創建。使用show程序狀態進行檢查。在那裏,我可以看到「WhoAreThey」爲1條目 –

+0

您的第一個參數是整數,您正在設置字符串。那是問題嗎? – PVR

回答

1

與其說WhoAreThey的調用mydb.WhoAreThey

String IN = "1000"; 
    cs = con.prepareCall("{call mydb.WhoAreThey(?,?)}"); 
    cs.setString(1, IN); 
    cs.registerOutParameter(2, Types.VARCHAR); 
    cs.execute(); 

要提取OUT PARAM利用價值:

String name = cs.getString(2); 
+0

輸出空值。我的程序是否正確? –

+0

與get_EmployeeName不同名稱的相同過程工作正常嗎? – PVR

+0

是的,這是正常工作。我將CUSTOMERS的表更改爲java程序的員工 –

相關問題