我正在嘗試使用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)
您確定存儲過程是否已創建? – shmosel
@shmosel:是的,它創建。使用show程序狀態進行檢查。在那裏,我可以看到「WhoAreThey」爲1條目 –
您的第一個參數是整數,您正在設置字符串。那是問題嗎? – PVR