2015-10-11 49 views
6

do prac domowych muszę stworzyć PL/SQL procedura przechowywana, aby dodać facutly członka do bazyJak wywołać procedurę przechowywaną w JDBC

CREATE OR REPLACE PROCEDURE ADDFACULTYDEPTSAL 
    (facid IN NUMBER, 
    facname IN VARCHAR, 
    depID IN NUMBER) 
AS 
    sal NUMBER; 
BEGIN 
    CALCSALDEPT(depID, sal); 
    IF sal >= 50000 
    THEN 
    sal := sal*.9; 
    ELSE 
    IF sal >= 30000 
    THEN 
     sal := sal*.8; 
    END IF; 
    END IF; 

    INSERT INTO FACULTY(fid, fname, deptid, salary) 
    VALUES(facid, facname, depID, sal); 
END ADDFACULTYDEPTSAL; 

Uczyniwszy to, muszę nawiązać połączenie java dla wspomniana procedura, którą mam zmęczony zrobić z:

Statement stmt = dbConnection.createStatement(); 
String in; 
if(a == 1){ 
    in = "ADDFACULTYDEPTSAL(" 
     + fid.getText() + "','" 
     + fname.getText() + "','" 
     + did.getText() + "')"; 
} else { 
    in = "ADDFACULTYUNISAL(" 
     + fid.getText() + "','" 
     + fname.getText() + "','" 
     + did.getText() + "')"; 
} 
stmt.executeQuery(in); 

Mam powyższy w próbie catch catch, który ciągle rzuca błąd. Próbowałem kilka wariantów na strunie "w" na podstawie tego, co widziałem na innych stronach internetowych: in = "{zadzwonić ADDFACULTYDEPSAL ... In =" call ADDFACULTYDEPSAL ...

patrząc tutaj: MySQL Connector Guide ja również próbowałem zmieniając stmt do rachunku na żądanie, takich jak:

CallableStatement stmt; 
if(a == 1){ 
    stmt = dbConnection.prepareCall("{call ADDFACULTYDEPTSAL(?,?,?)}"); 
} else { 
    stmt = dbConnection.prepareCall("{call ADDFACULTYUNISAL(?,?,?)}"); 
} 

jednak próbując w ten sposób nie wydaje się działać, bo trzeba przejść więcej niż dwie zmienne do procedury.

Czy ktoś może mi powiedzieć, co robię źle?

Odpowiedz

9

Byłaś prawie tam:

String call = (a == 1 ? "{call ADDFACULTYDEPTSAL(?,?,?)}" 
         : "{call ADDFACULTYUNISAL(?,?,?)}"); 
try (CallableStatement stmt = dbConnection.prepareCall(call)) { 
    stmt.setInt(1, Integer.parseInt(fid.getText())); 
    stmt.setString(2, fname.getText()); 
    stmt.setInt(3, Integer.parseInt(did.getText())); 
    stmt.execute(); 
} 
+0

To działa. Dziękuję Ci. – Eric