JDBC - CallableStatement

JJuuuunn·2024년 1월 31일
0

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

CallableStatement 메소드

메서드 리턴 타입 설명
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를 닫고 연관된 리소스를 해제합니다.

장점과 단점 요약

장점

  • 저장 프로시저 지원 : CallableStatement는 데이터베이스에서 저장 프로시저를 실행하기 위해 설계되었습니다.
  • 매개변수화된 쿼리 : 매개변수화된 쿼리를 지원하여 SQL 인젝션 공격의 위험을 줄입니다.
  • 성능 향상 : 사전 컴파일로 반복 실행에 대한 일반적인 명령문보다 효율적일 수 있습니다.
  • 출력 매개변수 : 저장 프로시저에서 OUT 매개변수를 등록하고 검색하는 기능을 제공합니다.
  • 일괄 처리 : 여러 쿼리를 단일 호출로 실행하는 일괄 처리를 지원합니다.

단점

  • 복잡성 : CallableStatement는 간단한 Statement 또는 PreparedStatement에 비해 사용하기 어렵습니다.
  • 데이터베이스 종속성 : 데이터베이스와 강하게 결합되어 다양한 데이터베이스 시스템 간에 이식성이 떨어질 수 있습니다.
  • 학습 곡선 : 개발자들은 저장 프로시저에 특화된 추가적인 개념과 구문을 익히는 필요가 있을 수 있습니다.
  • 제한된 유연성 : 저장 프로시저의 오버헤드가 불필요한 경우 단순하거나 즉석 쿼리에 적합하지 않을 수 있습니다.
  • 유지보수 오버헤드 : 데이터베이스 측의 저장 프로시저 유지보수는 추가 복잡성을 도입할 수 있습니다.

CallabeStatement 관한 자료 찾아보고 싶어도 국내에는 자료가 많지 않네요. ㅠㅠ
국내에서는 잘 사용하지를 않는건지 아니면 비밀리에 사용하고 공유를 안하는건지 이 이상은 document를 해독해야하는지 영어공부를 열심히 해야겠네요.

profile
포기하지않겠습니다.

0개의 댓글