English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
학습JDBC-문장한 장의 책을 읽으면서, JDBC에서 저장 절차를 사용하는 방법을 배웠습니다. 이 장은 그와 유사하지만, JDBC SQL escape syntax에 대한 더 많은 정보를 제공합니다.
Connection 객체가 Statement 및 PreparedStatement 객체를 생성하는 것처럼, CallableStatement 객체도 생성되어 데이터베이스 저장 절차 호출에 사용됩니다.
Oracle 저장 절차를 실행해야 하는 경우 다음과 같이 합니다:-
CREATE OR REPLACE PROCEDURE getEmpName (EMP_ID IN NUMBER, EMP_FIRST OUT VARCHAR) AS BEGIN SELECT first INTO EMP_FIRST FROM Employees WHERE ID = EMP_ID; END;
NOTE: 위의 저장 절차는 Oracle를 위해 작성되었습니다. 하지만 우리는 MySQL 데이터베이스를 사용하고 있으므로, EMP 데이터베이스에서 생성하기 위해 같은 저장 절차를 MySQL에서 작성하겠습니다.-
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() 메서드를 사용하여 IN 파라미터에 값을 바인딩합니다. |
OUT | 이 값은 반환된 SQL 문장에서 제공된 파라미터에 의해 결정됩니다. OUT 파라미터에서 getXXX() 메서드를 사용하여 값을 검색합니다. |
INOUT | 입력과 출력 값을 제공하는 파라미터. setXXX() 메서드를 사용하여 변수를 바인딩하고 getXXX() 메서드를 사용하여 값을 검색할 수 있습니다. |
이 코드 부분은 이전 스토리지 프로시저를 기반으로 이 메서드를 사용하여 객체를 인스턴스화하는 방법을 보여줍니다-Connection.prepareCall()CallableStatement
CallableStatement cstmt = null; try { String SQL = "{call getEmpName (?, ?)}"; cstmt = conn.prepareCall(SQL); . . . } catch (SQLException e) { . . . } finally { . . . }
문자 변수 SQL은 파라미터 대체기호를 포함한 스토리지 프로시저를 나타냅니다.
CallableStatement 객체를 사용하는 것은 PreparedStatement 객체를 사용하는 것과 매우 유사합니다. 모든 파라미터에 값을 바인딩한 후에만 이 문장을 실행해야 하며, 그렇지 않으면 SQLException을 받게 됩니다.
IN 파라미터가 있으면, PreparedStatement 객체에 적용되는 동일한 규칙과 기술을 따라야 합니다; 바인딩된 Java 데이터 타입에 해당하는 setXXX() 메서드를 사용합니다.
OUT 및 INOUT 파라미터를 사용할 때, 추가의 CallableStatement 메서드인 registerOutParameter()를 사용해야 합니다. registerOutParameter() 메서드는 JDBC 데이터 타입을 예상된 스토리지 프로시저가 반환할 데이터 타입에 바인딩합니다.
스토리지 프로시저를 호출한 후, 적절한 getXXX() 메서드를 사용하여 OUT 파라미터에서 값을 검색할 수 있습니다. 이 메서드는 검색된 SQL 타입의 값을 Java 데이터 타입으로 변환합니다.
다른 Statement 객체와 마찬가지로, 같은 이유로 CallableStatement 객체도 닫아야 합니다.
close() 메서드를 호출하면 됩니다. Connection 객체를 먼저 닫으면 CallableStatement 객체도 닫힙니다. 그러나, CallableStatement 객체를 명시적으로 닫아야 정확하게 정리할 수 있도록 해야 합니다.
CallableStatement cstmt = null; try { String SQL = "{call getEmpName (?, ?)}"; cstmt = conn.prepareCall(SQL); . . . } catch (SQLException e) { . . . } finally { cstmt.close(); }
연구하였습니다.콜러블 예제 코드에서상세한 내용을 연구했습니다.
Escape 문법은 기본 JDBC 메서드와 속성을 사용할 수 없는 데이터베이스 특정 기능을 유연하게 사용할 수 있게 합니다.
일반적인 SQL 대체 문법 형식은 다음과 같습니다.-
{키워드 'parameters'}
이하의 대체 시퀀스는 JDBC 프로그래밍에서 매우 유용하게 사용됩니다.-
이들은 날짜, 시간 및 타임스탬프 텍스트를 식별하는 데 도움이 됩니다.如您 알的那样, 두 개의 dbms는 시간과 날짜를 동일한 방식으로 표현하지 않습니다. 이 대체 문법은 드라이버가 목표 데이터베이스의 형식으로 날짜나 시간을 표시하도록 지시합니다. 예를 들어:
{d 'yyyy-mm-dd'}
이 경우 yyyy = 연도,mm = 월;dd = 일입니다. 이 문법 {d'2009-09-03는}2009년.3월.9일.
이는 테이블에 날짜를 삽입하는 방법을 보여주는 간단한 예제입니다.-
//Statement 객체를 생성합니다. stmt = conn.createStatement(); //데이터 삽입 ====> ID, 이름, 성, DOB String sql = "INSERT INTO STUDENTS VALUES" + "(100, 'Zara', 'Ali', {d '2001-12-16'); stmt.executeUpdate(sql);
동일하게, 다음 두 가지 문법 중 하나를 사용할 수 있습니다.t또는ts:
{t 'hh:mm:ss'}
이 경우 hh = 시간;mm = 분;ss = 초입니다. 이 문법 {t '13:30:29는}1:30:29 PM.
{ts 'yyyy-mm-dd hh:mm:ss
위 두 가지 문법의 조합 문법으로, 'd'와 't'는 타임스탬프를 대표합니다.
이 키워드는 LIKE 문에서 사용하는 대체 문자로 사용됩니다. SQL 대체 문자 %를 사용할 때 매우 유용하며, 이 표기는 0개 또는 여러 문자를 일치시킵니다. 예를 들어:
String sql = "SELECT symbol FROM MathSymbols String sql = "SELECT symbol FROM MathSymbols stmt.execute(sql);
WHERE symbol LIKE '\%' {escape '\'}";
fn 키워드이 키워드는 DBMS에서 사용하는 스칼라 함수를 나타냅니다. 예를 들어, SQL 함수length-
문자열의 길이를 가져오기 위해 사용됩니다
{fn length('Hello World')}11이는 반환됩니다
call 키워드-
이 키워드는 스토리지 프로시저를 호출하는 데 사용됩니다. 예를 들어, IN 매개변수가 필요한 스토리지 프로시저에 대한 문법은 다음과 같습니다
{call my_procedure(?)};-
필요한 IN 매개변수와 OUT 매개변수를 반환하는 스토리지 프로시저에 대한 문법은 다음과 같습니다
oj 키워드-
이 키워드는 외부 연결을 나타냅니다. 문법은 다음과 같습니다-{oj outer
join}-
외부 연결=테이블 {LEFT | RIGHT | FULL} OUTERJOIN {table | 검색 조건. 예를 들어 String sql = "SELECT Employees FROM {oj ThisTable RIGHT100'; stmt.execute(sql);