JDBC의 'CallableStatement'는 저장 프로시저 호출에 맞게 조정되었습니다. 자리 표시자를 사용하여 효율적인 실행 및 보안을 지원하고 SQL 주입 위험을 줄이지만 데이터베이스 의존성이 높은 부하가 올라갑니다.
DELIMITER $$
CREATE PROCEDURE {procedure}(
IN p_No INT,
IN p_Name VARCHAR(255),
OUT p_AckMessage VARCHAR(255)
)
BEGIN
INSERT INTO EMPLOYEE VALUES (p_No, p_Name);
SET p_AckMessage = {value};
END $$
DELIMITER ;
String SQL = "CALL {procedure}(?, ?, ?)";
cstmt = con.prepareCall(SQL);
cstmt.setInt(1, {int_value});
cstmt.setString(2, {String_value});
cstmt.registerOutParameter(3, Types.VARCHAR);
cstmt.execute(SQL);
ackMessage = cstmt.getString(3);
메서드 | 리턴 타입 | 설명 |
---|---|---|
setXXX (int parameterIndex, XXX value) |
void | 입력 매개변수에 값을 설정하며, XXX는 데이터 타입입니다 (예: setInt, setString). |
registerOutParameter (int parameterIndex, int sqlType) |
void | 저장 프로시저의 출력 매개변수를 등록하며, 인덱스와 SQL 타입을 지정합니다. |
execute() | boolean | 저장 프로시저 또는 함수를 실행합니다. |
getXXX(int parameterIndex) | XXX | 지정된 출력 매개변수의 값을 해당 데이터 타입 (XXX)으로 검색합니다. |
wasNull() | boolean | 마지막으로 읽은 OUT 매개변수에 SQL 값이 있는지 여부를 검색합니다 NULL. |
close() | void | CallableStatement를 닫고 연관된 리소스를 해제합니다. |
CallabeStatement 관한 자료 찾아보고 싶어도 국내에는 자료가 많지 않네요. ㅠㅠ
국내에서는 잘 사용하지를 않는건지 아니면 비밀리에 사용하고 공유를 안하는건지 이 이상은 document를 해독해야하는지 영어공부를 열심히 해야겠네요.