2016-12-21 11 views
0

javaを使用してストアドプロシージャを呼び出そうとしています。Javaを使用してプロシージャを呼び出すときに、パラメータ番号2がOUTパラメータではない

私はストアドプロシージャの初心者です。 は、だから私は、出力を得ることができる午前

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) 

mysqlの端子で同じ最初のを試してみました。

Javaを使用しようとしました。

CREATE PROCEDURE文

プロシージャコールは私のプロシージャ呼び出しが正しいか間違っている場合

わからない

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

はのSQLExceptionに 「のSQLException与え

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

:パラメータ番号2をOUTパラメータではありません」

UPDATE

"CS = con.prepareCallを呼び出すことにより、仕事(" {mydb.WhoAreThey()を呼び出す?を} ");"

しかし、私がしたときを選択@name .. "Null"を表示しています。

私は社員が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 procedure statusを使用してチェックします。そこに私は "WhoAreThey"を1つのエントリとして見ることができます –

+0

最初のパラメータは整数で、あなたはそれに文字列を設定しています。問題ありますか? – PVR

答えて

1

をチェックする代わりにWhoAreTheyを呼び出すアムemployees表から「デビッド・ウォーカー」として私を期待OUTのparam利用の値を取得するために

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

mydb.WhoAreTheyを呼び出します。

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

はnull値を出力しています。 –

+0

get_EmployeeNameとは異なる名前の同じプロシージャが正常に機能していますか? – PVR

+0

正しく機能しています。テーブルを顧客から従業員のJavaプログラム –

関連する問題