반응형
JDBC에서 저장 프로시저를 호출하는 방법
숙제를 위해 데이터베이스에 충실한 구성원을 추가하기 위해 pl/sql 저장 프로시저를 만들어야 합니다.
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;
이 작업을 수행한 후에는 해당 절차에 대해 Java 통화를 해야 하는데, 이 작업을 수행하는 데 지쳤습니다.
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);
저는 위의 내용을 계속해서 오류를 던지는 트라이 캐치 블록에 가지고 있습니다.다른 웹 사이트에서 본 내용을 바탕으로 "in" 문자열에 대해 여러 변형을 시도했습니다. = "{call ADDFAULTYDEPAL... in = "call ADDFAULTYDEPAL..."
여기 보기: MySQL Connector Guide 나는 stmt를 다음과 같이 호출 가능한 문으로 변경하려고 시도했습니다.
CallableStatement stmt;
if(a == 1){
stmt = dbConnection.prepareCall("{call ADDFACULTYDEPTSAL(?,?,?)}");
} else {
stmt = dbConnection.prepareCall("{call ADDFACULTYUNISAL(?,?,?)}");
}
하지만 이렇게 시도하는 것은 두 개 이상의 변수를 절차에 전달해야 하기 때문에 효과가 없는 것 같습니다.
누가 내가 뭘 잘못했는지 말해줄 수 있어요?
거의 다 왔었잖아요
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();
}
언급URL : https://stackoverflow.com/questions/33061280/how-to-call-a-stored-procedure-in-jdbc
반응형
'programing' 카테고리의 다른 글
콤보 상자에서 선택한 항목의 색인을 찾으려면 어떻게 해야 합니까? (0) | 2023.08.13 |
---|---|
문자열로서의 Excel 셀 값은 문자열로 저장되지 않습니다. (0) | 2023.08.13 |
라라벨 5의 모델에 복합 키를 넣으려면 어떻게 해야 합니까? (0) | 2023.08.13 |
오류: 리소스 Android:attr/fontVariationSettings를 찾을 수 없습니다. (0) | 2023.08.13 |
일시적인 데드존이란 무엇입니까? (0) | 2023.08.13 |