저장 프로시저 생성하기
DELIMITER $$
DROP PROCEDURE IF EXISTS `EMP`.`getEmpName` $$
CREATE PROCEDURE `EMP`.`getEmpName`
(IN EMP_ID INT, OUT EMP_FIRST VARCHAR(255))
BEGIN
SELECT first INTO EMP_FIRST
FROM Employees
WHERE ID = EMP_ID;
END $$
DELIMITER ;
프로시저에는 IN, OUT, INOUT 매개변수가 있습니다. PreparedStatement 객체는 IN 매개변수만 사용하지만, CallableStatement 객체는 모두 사용할 수 있습니다.
- IN: SQL 문이 생성될 때 값이 알려지지 않은 매개변수. setXXX() 메서드를 사용하여 값을 바인딩
- OUT: SQL 문이 반환하는 값을 제공하는 매개변수. getXXX() 메서드를 사용하여 값을 가져옵니다.
- INOUT: IN과 OUT 모두 제공하는 매개변수
CallableStatement cstmt = null;
try {
String SQL = "{call getEmpName (?, ?)}";
cstmt = conn.prepareCall(SQL);
. . .
}
catch (SQLException e) {
. . .
}
finally {
. . .
}
CallableStatement 객체를 사용하는 것은 PreparedStatement 객체를 사용하는 것과 매우 유사합니다. 문을 실행하기 전에 모든 매개변수에 값을 바인딩해야 하며, 그렇지 않으면 SQLException이 발생합니다.
IN 매개변수가 있는 경우 PreparedStatement 객체에 적용되는 동일한 규칙과 기술을 따르며, 바인딩할려는 Java 데이터 타입에 해당하는 setXXX() 메서드를 사용합니다.
OUT 및 INOUT 매개변수를 사용할 때는 추가로 CallableStatement 메서드 registerOutParameter()를 사용해야 합니다. 이 메서드는 JDBC 데이터 타입을 스토어드 프로시저가 반환할 것으로 예상되는 데이터 타입에 바인딩합니다.
저장 프로시저를 호출한 후, 적절한 getXXX() 메서드를 사용하여 OUT 매개변수에서 값을 가져 옵니다.
CallableStatement 객체 닫기
다른 Statement 객체를 닫는 것과 마찬가지로 닫아야합니다. 간단히 finally 문에 close() 메서드를 호출하면 됩니다.
CallableStatement cstmt = null;
try {
String SQL = "{call getEmpName (?, ?)}";
cstmt = conn.prepareCall(SQL);
. . .
}
catch (SQLException e) {
. . .
}
finally {
cstmt.close();
}
JDBC SQL 이스케이프 구문
이스케이프 구문은 표준 JDBC 메서드와 속성으로는 사용할 수 없는 데이터베이스 특정 기능을 사용할 수 있는 유연성을 제공합니다.
{keyword 'parameters'}
d, t, ts 키워드
이 키워드는 날짜, 시간 및 타임스탬프 리터럴을 식별하는 데 도움이 됩니다. DBMS마다 시간과 날짜를 표현하는 방식이 다르기 때문에 이 이스케이프 구문은 드라이버가 대상 데이터베이스의 형식으로 날짜나 시간을 렌더링하도록 지시합니다.
{d 'yyyy-mm-dd'}
여기서 yyyy는 연도, mm은 월, dd는 일입니다.
{t 'hh:mm:ss'}
여기서 hh는 시간, mm은 분, ss는 초입니다.
{ts 'yyyy-mm-dd hh:mm:ss'}
날짜와 시간 구문을 결합한 타임스탬프를 나타내는 구문입니다.
excape 키워드
이 키워드는 LIKE 절에서 이스케이프 문자를 식별합니다.
String sql = "SELECT symbol FROM MathSymbols WHERE symbol LIKE '\\%' {escape '\\'}";
stmt.execute(sql);
fn 키워드
이 키워드는 DBMS에서 사용되는 스칼라 함수를 나타냅니다.
{fn length('Hello World')}
call 메서드
이 키워드는 저장 프로시저를 호출하는 데 사용됩니다.
IN 매개변수가 필요한 경우
{call my_procedure(?)};
OUT 매개변수도 반환하는 경우
{? = call my_procedure(?)};
oj 키워드
이 키워드는 외부 조인을 나타내는 데 사용됩니다.
String sql = "SELECT Employees FROM {oj ThisTable RIGHT OUTER JOIN ThatTable on id = '100'}";
stmt.execute(sql);
'Databases > JDBC' 카테고리의 다른 글
[JDBC] Connection Pool(커넥션 풀링) (0) | 2024.07.08 |
---|---|
[JDBC] 출력 스트림 사용하기 (0) | 2024.07.08 |
[JDBC] Batch Processing(일괄 처리) (0) | 2024.07.08 |
[JDBC] 예외 처리 (0) | 2024.07.08 |
[JDBC] Transactions 사용법 (0) | 2024.07.05 |