[英]Showing parameter number 2 is not an OUT parameter while calling a procedure using java
I am trying to call a stored procedure using java. 我试图使用Java调用存储过程。
I am a beginner in stored procedure. 我是存储过程的初学者。 So tried the same first in mysql terminal
所以首先在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)
I am able to get the output. 我能够得到输出。
Now tried using Java. 现在尝试使用Java。
Create procedure statement 创建过程语句
stmt.execute("create procedure mydb.WhoAreThey(IN id INT, OUT name VARCHAR(20)) begin select Name into name from employees where EmployeeID = id; end");
Procedure Call 程序调用
Not sure if my procedure call is right or wrong 不确定我的过程调用是对还是错
String IN = "1000";
cs = con.prepareCall("{call WhoAreThey(?,?)}");
cs.setString(1, IN);
cs.registerOutParameter(2, Types.VARCHAR);
cs.execute();
Above call gives an sqlexception "SQLException: Parameter number 2 is not an OUT parameter" 上面的调用给出了一个sqlexception “ SQLException:参数号2不是OUT参数”
UPDATE 更新
worked by calling " cs = con.prepareCall("{call mydb.WhoAreThey(?,?)}");" 通过调用“ cs = con.prepareCall(“ {致电mydb.WhoAre他们(?,?)}”))工作;“
But When I did select @name ..it is showing "Null". 但是当我选择@name ..时,它显示“ Null”。
I expected my out as "David Walker" from employees table as EmployeeID is 1000. 我期望从Employees表中以“ David Walker”身份出局,因为EmployeeID为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)
Am I checking in a wrong way(select @name) 我是否以错误的方式检查(选择@name)
Instead of calling WhoAreThey call mydb.WhoAreThey 他们没有呼叫WhoAre他们而是呼叫mydb。
String IN = "1000";
cs = con.prepareCall("{call mydb.WhoAreThey(?,?)}");
cs.setString(1, IN);
cs.registerOutParameter(2, Types.VARCHAR);
cs.execute();
To fetch the value of OUT param USE: 要获取OUT param USE的值,请执行以下操作:
String name = cs.getString(2);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.