2016-12-21 2 views
0

Ich versuche, eine gespeicherte Prozedur mit Java aufzurufen.Das Anzeigen von Parameternummer 2 ist kein OUT-Parameter beim Aufrufen einer Prozedur mit Java

Ich bin ein Anfänger in gespeicherten Verfahren. versucht also die gleiche erste in mysql Terminal

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) 

Ich bin in der Lage, die Ausgabe zu erhalten.

Jetzt versucht mit Java.

erstellen Prozeduranweisung

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

Nicht sicher, ob mein Prozeduraufruf richtig oder falsch ist

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

Vor Aufruf gibt einem sqlexception „SQLException: Parameternummer 2 ist kein OUT-Parameter "

UPDATE

arbeitete von "cs = con.prepareCall (" {call mydb.WhoAreThey (,)?} ") Nennen;"

Aber wenn ich tat wählen Sie @ Name .. es zeigt "Null".

erwartete ich meine, wie "David Walker" aus der Tabelle Mitarbeiter als EmployeeID 1000 ist

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) 

Bin ich in einer falschen Weise Prüfung (wählen @name)

+1

Sind Sie sicher, dass der gespeicherte Proc erstellt wurde? – shmosel

+0

@shmosel: Ja, es ist erstellt. überprüft mit show procedure status. Dort kann ich "WhoAreThey" als 1 Eintrag sehen. –

+0

Ihr erster Parameter ist eine Ganzzahl und Sie setzen einen String hinein. Ist das ein Problem? – PVR

Antwort

1

Statt des Aufrufs WhoAreThey rufen mydb.WhoAreThey

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

Um den Wert von OUT param USE zu holen:

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

Ausgabe eines Nullwerts. Ob meine Prozedur richtig ist? –

+0

Das gleiche Verfahren mit anderen Namen, die get_EmployeeName funktioniert gut, oder? – PVR

+0

Ja, das funktioniert richtig.Ich habe die Tabelle von KUNDEN zu Mitarbeitern für Java-Programm geändert –

Verwandte Themen