1. PreparedStatement
- Statement의 subinterface이며, parameterized query를 사용할 때 활용한다. 변수를 사용할 수 있기 때문에 Statement 종류 중 가장 많이 활용된다. 또한, 여러 종류의 쿼리를 사용하지만 컴파일은 한 번만 하므로 성능상 이득이 있다.
- 쿼리에서 parameterized하고 싶은 부분을 '?' (물음표)로 작성하고, 해당 부분에 들어갈 파라미터는 PreparedStatement의 함수를 이용해서 세탕한다.
- 예) "insert into table value(?, ?)"
PreparedStatement 주요 메소드
PreparedStatement에는 Statement의 인터페이스를 모두 구현한다.
public void setInt(int paramIndex, int Value)
- paramIndex 자리에 있는 파라미터에 int 값으로 세팅
public void setString(int paramIndex, string value)
- paramIndex 자리에 있는 파라미터에 string 값으로 세팅
public void setFloat(int paramIndex, float value)
- paramIndex 자리에 있는 파라미터에 float 값으로 세팅
public void setDouble(int paramIndex, double value)
- paramIndex 자리에 있는 파라미터에 double 값으로 세팅
2. CallableStatement
2.1 Stored Procedure, Function의 용도 및 사례
DB에는 SQL 말고도 stored procedure 또는 function이 있다.
SQL은 아니지만, 자주 사용하는 여러 동작의 Set
SQL으로 실행한다면, I/O를 해야하는데, 한 번에 DB에서 모두 처리한 뒤 최종 결과만 빨리 받고 싶을 때 (보통 Application 서버보다 DB서버의 스펙이 훨씬 좋기 때문)
Function은 그 자체로도 호출할 수 있으나, SQL문 내에서도 호출할 수 있다는 점이 Stored Procedure와의 차이점이다.
Function 사례
복잡한 수학적 연산을 자동화 하는 것을 Function으로 만들어 놓고 재사용
문자열 변환, 이미 입력된 데이터의 인코딩 오류 해결 등을 Function으로 만들어 놓고 재사용
Stored Producedure 사례
여러 SQL문으로 수행되어야 할 데이터 집계
복제 테이블을 만들거나 유효기간이 자난 데이터를 삭제하는 등의 작업을 자동화 하고 싶을 때
DBA가 DB를 관리하기 위한 기능(용량 모니터링, 감사 자료 추출 등)을 의미 단위로 만들어 놓고 재사용하고 싶을 때
JDBC에서는 이런 stored procedure 또는 function은 CallableStatement 클래스를 이요해서 다룬다.
2.2 Custom Procedure 정의
Procedure 정의
DELIMITER //
CREATE PROCEDURE discount_price(IN _id int unsigned, IN percent int, OUT discounted_price int)
BEGIN
update product set price = (price - (price * (percent/100))) where `id` = _id;
select price into discounted_price from product where `id` = _id;
END //
DELIMITER ;
Procedure 삭제
DROP PROCEDURE discount_price
Procedure 호출
call discount_price(1, 10, @discounted_price);
select @discounted_price;
2.3 CallableStatement로 procedure 호출
- Connection.prepareCall(string statement) : CallableStatement를 만들고, 파라미터는 ?로 처리
- CallableStatement를 사용하는 방법은 PreparedStatement를 사용하는 방법과 같은 방식으로 index, label 별로 타입에 맞는 값을 세팅
- 단, out parameter는 CallableStatement.registerOutParameter(int index 또는 string label, java.sql.Type type)으로 세팅
- execute() 함수 실행
- 결과는 execute() 함수를 해석하는 방식과 같음
- 단, out parameter는 callableStatement 객체에 바로 getXXX 함수를 통해 얻음
2.4 callableStatement로 Function 호출
- Function은 callableStatement를 이용해 호출할 수도 있고, 다른 query statement 객체의 SQL문에서 곧바로 사용할 수도 있다. callableStatement를 이용하는 방식에 위 procedure call 할 때 사용한 방식과 같음
'Computer Science > Database' 카테고리의 다른 글
[NoSQL] NoSQL의 개념과 특징, 사례 (RDBMS와 비교) (0) | 2023.02.06 |
---|---|
[Database] ORM(Object Relation Mapping) (0) | 2023.01.24 |
[Database] JDBC - Statement, ResultSet (0) | 2023.01.17 |
[Database] JDBC - DriverManager, Connection (MySQL 접속) (0) | 2023.01.13 |
[JDBC] JDBC (Java Database Connectivity) (0) | 2023.01.12 |