使用java

时间:2016-12-21 04:39:07

标签: java mysql stored-procedures

我正在尝试使用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)

1 个答案:

答案 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);