2015-10-11 13 views
6

per compiti a casa devo creare un pl/sql stored procedure per aggiungere un membro facutly a un databaseCome chiamare una stored procedure in 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; 

Fatto questo, ho bisogno di fare una chiamata java per tale procedura, che ho stanco a che fare con:

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

ho quanto sopra in un blocco catch try che mantiene gettare un errore. Ho provato diverse varianti sulla corda "in" sulla base di quello che ho visto in altri siti: in = "{call ADDFACULTYDEPSAL ... in =" call ADDFACULTYDEPSAL ...

cercando qui: MySQL Connector Guide anche io provato a cambiare stmt una dichiarazione richiamabile in quanto tale:

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

Tuttavia, cercando in questo modo non sembra funzionare perché ho bisogno di passare più di due variabili nella procedura.

Qualcuno può dirmi cosa sto facendo male?

risposta

9

Eri quasi arrivato:

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

che funziona. Grazie. – Eric

Problemi correlati