2015-10-11 28 views
6

Đối với bài tập về nhà tôi phải tạo ra một pl/sql stored procedure để thêm một thành viên facutly đến một cơ sở dữ liệuLàm thế nào để gọi một thủ tục lưu trữ trong 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; 

Sau khi làm điều đó, tôi cần phải thực hiện một cuộc gọi java cho thủ tục nói, mà tôi đã mệt mỏi để làm với:

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

Tôi có ở trên trong một khối bắt thử mà giữ ném một lỗi. Tôi đã thử nhiều biến thể trên chuỗi "trong" dựa trên những gì tôi nhìn thấy trên các trang web khác: trong = "{gọi ADDFACULTYDEPSAL ... trong =" gọi ADDFACULTYDEPSAL ...

tìm ở đây: MySQL Connector Guide Tôi cũng đã cố gắng thay đổi tuyên bố thành tuyên bố có thể gọi được như vậy:

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

Tuy nhiên, cố gắng theo cách này dường như không hoạt động vì tôi cần chuyển nhiều hơn hai biến vào quy trình.

Có ai cho tôi biết tôi đang làm gì sai không?

Trả lời

9

Bạn gần như có:

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

đó làm việc. Cảm ơn bạn. – Eric

Các vấn đề liên quan