상세 컨텐츠

본문 제목

작업객체의 의미와 종류

IT/DBMS

by TMI1 2025. 8. 4. 11:53

본문

■■■ Statement 종류 및 의미 ■■■ 

○ Statement 의 종류
- Statement
  : 하나의 쿼리를 사용하고나면 더 이상 사용할 수 없다.
- PrepareStatement
  : 하나의 PrepareStatement 로 쿼리를 여러 번 처리할 수 있다.
- CallableStatement
  : 데이터베이스 내의 스토어드 프로시저를 호출할 수 있는 Statement이다. 

○ Statement 의 의미
   자바에서 사용되는 3가지 종류의 스테이트먼트들은
   데이터베이스로 쿼리를 담아서 보내는 그릇 정도로 상상할 수 있다.
   즉, 스테이트먼트에 쿼리를 실어 데이터베이스로 보내면
   데이터베이스에서 처리되는 것이다.
   이 때, 한 번 사용하고 버리는 그릇은 Statement 이며,
   재사용이 가능한 그릇은 PrepareStatement 이다. 
   
■■■ PreparedStatement ■■■ 
1. Statement 의 execute 메소드는
 문자열로 구성된  SQL 구문을 DBMS 로 전달하는 역할을 수행하며,
 내부적으로 SQL  구문을 JDBC 드라이버가 읽어낼 수 있는 형식으로
 전처리(procompile)하게 된다.

이후 드라이버는 DBMS 에 전처리된 요구사항을 전송하게 되는데,
SQL 구문을 매번 전처리 과정을 거쳐서 전송하게 되기 때문에
반복적인 작업에서 속도가 느려질 수 있는 한계를 갖고 있다.

이에 반하여, PreparedStatement는
전처리된 Statement 로 주어진 sql 문을 미리 전처리 과정을 수행한 상태로
보관해 두기 때문에 반복적인 작업을 수행하는데 있어서 매우 유리하다.

Statement 의 하위 객체인 PreparedStatement 는
Statement 의 모든 기능을 상속 받으며
IN 매개변수의 위치에 데이터베이스로 전송되어질 값을 지정하기 위해
필요한 전체 모든 메소드들의 집합을 포함시킨다.

또한 , 세 개의 메소드 『execute()』, 『executeUpdate()』,『 executeQuery()』는
아무런 파라미터도 가지지 않는다.
이러한 메소드들의 Statement 형태(즉,SQL 문 매개변수를 가지는 형태)는
PreparedStatement 객체에서 사용되지 않는다.

2. IN 매개변수 넘겨주기
PreparedStatement 객체를 실행하기 전에
각 [?] 매개변수의 값이 설정되어져 있어야 한다.
이것은 [setXxx()] 메소드를 호출하여 이루어지게 되며
[Xxx]는 매개변수에 대한 적당한 형(Type)이다.
[setXxx()] 메소드의 첫 번째 인자는 설정된 매개변수의 순번이고,
두 번째 인자는 매개변수가 설정될 값이다. 

■■■ CallableStatement ■■■

1. CallableStatement 인터페이스는 모든 DBMS 들에 대한 표준 방법으로 
   저장 프로시저(stored procedure)를 호출하는 방법을 제공하는 인터페이스이며,
   호출은 escape 문법으로 작성된다.

2. 결과 매개변수를 가지는 형태와 결과 매개변수가 없는 형태이며
   OUT 매개변수의 종류인 결과 매개변수는 저장 프로시저에 대한 리턴값이다.
   두 형태 모두 IN 매개변수(입력), OUT 매개변수(출력), INOUT 매개변수(입출력)
   를 위해 사용되는 매개변수의 변수 번호를 가지며
   『?』는 매개변수의 저장 위치로 나타낸다.

3. JDBC 에서 저장 프로시저를 호출하기 위한 문법은 다음과 같으며 『[]』 내의 내용은 선택적이다. 

   IN 매개변수를 반환하는 프로시저 호출
   {call procedure_name[(?, ?, ...)]}	

   OUT 매개변수를 리턴하는 프로시저 호출 / 반환자료형이 존재하는 함수 호출
   {? = call procedure_name[(?, ?, ...)]}

   매개변수가 없는 저장 프로시저 호출
   {call procedure_name}
	
   INOUT 매개변수를 리턴하는 프로시저 호출
   ※ 상황에 따라 상이함. 

4. CallableStatement 객체 생성
   CallableStatement 객체는 
   Connection 의 prepareCall() 메소드에 의해 생성된다.
   예를 들어, 두 개의 인자값을 가지고 있으며 결과 매개변수가 없는
   저장 프로시저 『prcData』를 호출하는 방법은 다음과 같다.

   CallableStatement cstmt = conn.prepareCall("{call prcData(?, ?)}");
   // conn : Connection 객체 

   ※ 물음표(『?』) 의 위치가 IN, OUT, INOUT 중 어떤 매개변수인지는
      저장 프로시저 prcData에 의존한다.

5. IN, OUT 매개변수
   CallableStatement 객체로 IN 매개변수를 넘겨주는 것은
   PreparedStatement 로 부터 상속받은 setXxx() 메소드이다.
   에를 들어, setFloat() 메소드는 float 값을 넘겨준다. 

   만약,저장 프로시저가 OUT 매개변수를 리턴한다면
   각 OUT 매개변수의 SQL형(Type)은 CallableStatement 객체를
   실행할 수 있는 상태가 되기 전에 등록되어져야 한다.(사전에 등록)
   이는 몇 몇 DBMS들이 SQL 형(Type)을 필요로하기 때문이며
   이 때, SQL 형(Type)을 등록하는 것은 registerOutParameter() 메소드를 사용하게 된다.
   그리고, SQL 구문이 실행되어진 다음에
   CallableStatement 의 getXxx() 메소드는 매개변수의 값을 검색하며,
   사용되는 정확한 getXxx() 메소드는 그 매개변수를 위해 등록되어진
   SQL에 상응하는 자바 형(Type)이다.
   즉, registerOutParameter() 메소드는 SQL 형을 사용하고,
   getXxx() 메소드는 이것을 자바 타입으로 캐스트(Cast)한다.

'IT > DBMS' 카테고리의 다른 글

JDBC 프로그램의 작성  (2) 2025.08.04
싱글톤 패턴을 이용한 데이터베이스 연결 객체 생성  (0) 2025.08.04
JDBC 개념 및 환경설정  (7) 2025.08.04
Oracle - PACKAGE 실습  (0) 2025.07.16
Oracle - TRIGGER 실습  (3) 2025.07.16

관련글 더보기

댓글 영역