7-CallableStatement 본 개술 은'JDBCTM Database Access from JavaTM:A Tutorial and Annotated Reference'라 는 책 에서 발췌 한 것 이다.자바 소프트 는 현재 이 책 을 준비 하고 있다.이 책 은 튜 토리 얼 이자 JDBC 의 중요 한 참고 매 뉴 얼 로 자바 시리즈 의 구성 부분 으로 1997 년 봄 Addison-Wesley 출판사 에서 출판 된다.7.1 Callable Statement 대상 을 요약 하여 모든 DBMS 에 저 장 된 과정 을 표준 형식 으로 호출 하 는 방법 을 제공 합 니 다.저 장 된 프로 세 스 는 데이터베이스 에 저 장 됩 니 다.저 장 된 프로 세 스에 대한 호출 은 Callable Statement 대상 에 포 함 된 내용 입 니 다.이런 호출 은 일종 의 코드 교환 문법 으로 쓴 것 으로 두 가지 형식 이 있다.하 나 는 결과 파 라미 터 를 가지 고 있 고 다른 하 나 는 결과 파 라미 터 를 가지 고 있 지 않다(코드 교환 문법 에 대한 정 보 는 제4 절'문장'참조).결과 매개 변 수 는 출력(OUT)매개 변수 로 저 장 된 과정의 반환 값 입 니 다.두 가지 형식 모두 수량 가 변 적 인 입력(IN 매개 변수),출력(OUT 매개 변수)또는 입 출력(INOUT 매개 변수)의 매개 변 수 를 가 질 수 있다.물음 표 는 매개 변수의 자리 표시 자로 사 용 될 것 이다.JDBC 에서 저 장 된 프로 세 스 를 호출 하 는 문법 은 다음 과 같다.네모 난 괄호 는 그 사이 의 내용 을 선택 할 수 있 음 을 나타 낸다.괄호 자 체 는 문법 구성 부분 이 아 닙 니 다.{call 프로 세 스 이름[(??,...)]}결과 파 라미 터 를 되 돌려 주 는 과정의 문법 은 다음 과 같 습 니 다.{?=call 프로 세 스 이름[(??,...)]}인자 가 없 는 저 장 된 프로 세 스 의 문법 은 유사 합 니 다.{call 프로 세 스 이름}보통 Callable Statement 대상 을 만 든 사람 은 사용 하 는 DBMS 가 저 장 된 프로 세 스 를 지원 하고 이 과정 이 무엇 인지 알 아야 합 니 다.그러나 검사 가 필요 하 다 면 다양한 DatabaseMetaData 방법 으로 이런 정 보 를 제공 할 수 있다.예 를 들 어 DBMS 가 저 장 된 프로 세 스 호출 을 지원 하면 슈퍼 portsStored Procedures 방법 은 true 로 돌아 가 고 getProcedures 방법 은 저 장 된 프로 세 스에 대한 설명 을 되 돌려 줍 니 다.CallableStatement 은 Statement 을 계승 하 는 방법(일반적인 SQL 문 구 를 처리 하 는 데 사용)을 계승 하고,preparedStatement 의 방법(IN 인 자 를 처리 하 는 데 사용)을 계승 합 니 다.Callable Statement 에서 정의 하 는 모든 방법 은 OUT 매개 변수 나 INOUT 매개 변수의 출력 부분 을 처리 하 는 데 사 용 됩 니 다.OUT 매개 변 수 를 등록 하 는 JDBC 형식(일반 SQL 형식),이 매개 변수 에서 결 과 를 검색 하거나 되 돌아 오 는 값 이 JDBC NULL 인지 확인 합 니 다.7.1.1 CallableStatement 대상 을 만 드 는 CallableStatement 대상 은 Connection 방법 으로 prepareCall 로 만 듭 니 다.다음 에 Callable Statement 을 만 드 는 인 스 턴 스 는 저 장 된 프로 세 스 getTestData 호출 을 포함 합 니 다.이 과정 은 두 개의 변수 가 있 지만 결과 인 자 는 포함 되 지 않 습 니 다.Callable Statement cstmt=con.prepareCall("{call getTestData(??)}");그 중?자리 표시 자 는 IN,OUT 또는 INOUT 매개 변수 로 저 장 된 프로 세 스 getTestData 에 달 려 있 습 니 다.7.1.2 IN 과 OUT 인 자 는 IN 인 자 를 Callable Statement 대상 에 게 전달 하 는 것 은 set XXX 방법 으로 이 루어 집 니 다.이 방법 은 Prepared Statement 에서 계승 합 니 다.들 어 오 는 매개 변수의 유형 은 setXXX 방법 을 결정 합 니 다(예 를 들 어 setFloat 값 등).저 장 된 프로 세 스 가 OUT 인 자 를 되 돌려 준다 면,Callable Statement 대상 을 실행 하기 전에 모든 OUT 인자 의 JDBC 형식 을 등록 해 야 합 니 다.(이것 은 필수 적 입 니 다.일부 DBMS 가 JDBC 형식 을 요구 하기 때 문 입 니 다.)JDBC 유형 등록 은 registerOutParameter 방법 으로 이 루어 집 니 다.문 구 를 실행 한 후 CallableStatement 의 getXXX 방법 은 매개 변수 값 을 되 찾 습 니 다.올 바른 getXXX 방법 은 매개 변수 에 등 록 된 JDBC 형식 에 대응 하 는 자바 형식(JDBC 형식 에서 자바 형식의 표준 맵 은 8.6.1 절 에 있 는 표 참조)입 니 다.다시 말 하면 registerOutParameter 는 JDBC 형식 을 사용 하고 getXXX 는 자바 형식 으로 변환 합 니 다.예 를 들 어 다음 코드 는 OUT 인 자 를 등록 하고 cstmt 에서 호출 된 저장 과정 을 실행 한 다음 OUT 인자 에서 되 돌아 오 는 값 을 검색 합 니 다.방법 getByte 는 첫 번 째 OUT 매개 변수 에서 자바 바이트 하 나 를 꺼 내 고 getBigDecimal 은 두 번 째 OUT 매개 변수 에서 BigDecimal 대상(소수점 뒤에 세 자리)을 꺼 냅 니 다.Callable Statement cstmt=con.prepareCall("{callgetTestData(?)}");cstmt.registerOutParameter(1, java.sql.Types.TINYINT);cstmt.registerOutParameter(2, java.sql.Types.DECIMAL, 3);cstmt.executeQuery();byte x = cstmt.getByte(1);java.math.BigDecimal n = cstmt.getBigDecimal(2, 3);Callable Statement 은 ResultSet 과 달리 큰 OUT 값 을 증분 으로 검색 하 는 특수 한 메커니즘 을 제공 하지 않 습 니 다.7.1.3 INOUT 매개 변 수 는 입력 과 출력 을 지원 하 는 매개 변수(INOUT 매개 변수)는 registerOutParameter 방법 을 호출 하 는 것 외 에 적당 한 set XXX 방법(이 방법 은 Prepared Statement 에서 계승 한 것)을 호출 해 야 한다.setXXX 방법 은 매개 변수 값 을 입력 매개 변수 로 설정 하고 registerOutParameter 방법 은 JDBC 형식 을 출력 매개 변수 로 등록 합 니 다.setXXX 방법 은 자바 값 을 제공 합 니 다.드라이버 는 이 값 을 JDBC 값 으로 변환 한 다음 데이터베이스 에 보 냅 니 다.이러한 IN 값 의 JDBC 유형 과 registerOutParameter 방법 을 제공 하 는 JDBC 유형 은 같 아야 합 니 다.그리고 출력 값 을 검색 하려 면 해당 하 는 getXXX 방법 을 사용 해 야 합 니 다.예 를 들 어 자바 형식 이 byte 인 매개 변 수 는 방법 setByte 를 사용 하여 입력 값 을 부여 해 야 합 니 다.registerOutParameter 에 TINYINT 형식 인 JDBC 형식 을 제공 하고 getByte 를 사용 하여 출력 값 을 검색 해 야 합 니 다(8 절'JDBC 와 자바 형식 간 맵'은 상세 한 정보 와 유형 맵 표를 제공 합 니 다).다음 예 는 저 장 된 프로 세 스 reviseTotal 이 있다 고 가정 합 니 다.유일한 매개 변 수 는 INOUT 매개 변수 입 니 다.방법 setByte 는 이 인 자 를 25 로 설정 하고 드라이버 는 JDBC TINYINT 형식 으로 데이터베이스 에 보 냅 니 다.이 어 registerOutParameter 는 이 인 자 를 JDBC TINYINT 로 등록 했다.이 저장 과정 을 실행 하면 새 JDBC TINYINT 값 을 되 돌려 줍 니 다.방법 getByte 는 이 새 값 을 자바 byte 형식 으로 검색 합 니 다.CallableStatement cstmt = con.prepareCall("{call reviseTotal(?)}");cstmt.setByte(1, 25);cstmt.registerOutParameter(1, java.sql.Types.TINYINT);cstmt.executeUpdate();byte x = cstmt.getByte(1);7.1.4 먼저 결 과 를 검색 한 다음 에 OUT 인 자 를 검색 하 는 것 은 일부 DBMS 의 제한 으로 인해 가장 큰 이식 성 을 실현 하기 위해 서 는 먼저 Callable Statement 대상 이 발생 한 결 과 를 검색 한 다음 에 Callable Statement.getXXX 방법 으로 OUT 인 자 를 검색 하 는 것 을 권장 합 니 다.Callable Statement 대상 이 여러 ResultSet 대상(execute 방법 호출)을 되 돌려 주면 OUT 인 자 를 검색 하기 전에 모든 결 과 를 검색 해 야 합 니 다.이 경우 모든 결과 에 접근 할 수 있 도록 Statement 방법 getResultSet,getUpdateCount,getMore Results 를 더 이상 결과 가 나 오지 않 을 때 까지 호출 해 야 합 니 다.모든 결 과 를 검색 한 후,Callable Statement.getXXX 방법 으로 OUT 인자 의 값 을 검색 할 수 있 습 니 다.7.1.5 OUT 매개 변수 인 NULL 값 을 검색 하여 OUT 매개 변수 로 되 돌려 주 는 값 은 JDBC NULL 일 수 있 습 니 다.이러한 상황 이 발생 하면 JDBC NULL 값 을 getXXX 방법 으로 되 돌아 오 는 값 을 null,0 또는 false 로 변환 합 니 다.이것 은 getXXX 방법 유형 에 달 려 있 습 니 다.ResultSet 대상 에 대해 서 는 0 이나 false 가 JDBC NULL 에서 유래 했 는 지 아 닌 지 를 알 아 보 는 유일한 방법 은 wasNull 로 검 측 하 는 것 이다.getXXX 방법 으로 읽 은 마지막 값 이 JDBC NULL 이면 이 방법 은 true 로 돌아 가 고 그렇지 않 으 면 flase 로 돌아 갑 니 다.5 절'ResultSet'에 서 는 자세 한 정 보 를 제공 할 예정 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: