我正在尝试使用java调用存储过程。
我是存储过程的初学者。 所以在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。
创建程序声明
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参数"
更新
致电" cs = con.prepareCall(" {call mydb.WhoAreThey(?,?)}");"
但是当我选择@name 时,它显示" Null"。
我期待我的出去和#34; David Walker"从employees表中,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)
我是否以错误的方式检查(选择@name)
答案 0 :(得分: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 USE的值:
String name = cs.getString(2);