JDBCTM 가이드:입문 6-Prepared Statement

5593 단어 JDDBBCCTTM손가락
6-Prepared Statement 본 개술 은'JDBCTM Database Access from JavaTM:A Tutorial and Annotated Reference'라 는 책 에서 발췌 한 것 이다.자바 소프트 는 현재 이 책 을 준비 하고 있다.이것 은 튜 토리 얼 이자 JDBC 의 중요 한 참고 수첩 으로 자바 시리즈 의 구성 부분 으로 1997 년 봄 에 Addison-Wesley 출판사 에서 출판 될 것 이다.6.1 이 Prepared Statement 인터페이스 가 Statement 을 계승 하 는 것 을 요약 하고 두 가지 측면 에서 다 릅 니 다.Prepared Statement 인 스 턴 스 는 컴 파일 된 SQL 문 구 를 포함 합 니 다.이것 이 바로 문 구 를 준비 하 게 하 는 것 이다.Prepared Statement 대상 에 포 함 된 SQL 문 구 는 하나 이상 의 IN 인 자 를 가 질 수 있 습 니 다.IN 매개 변수의 값 은 SQL 문 구 를 만 들 때 지정 되 지 않 았 습 니 다.반대로 이 문 구 는 IN 매개 변수 에 물음표("?")를 유지 합 니 다.자리 차지 문자 로 삼다.모든 물음표 의 값 은 이 문 구 를 실행 하기 전에 적당 한 setXXX 방법 으로 제공 해 야 합 니 다.Prepared Statement 대상 이 사전 번역 되 었 기 때문에 실행 속 도 는 Statement 대상 보다 빠르다.따라서 여러 번 실 행 된 SQL 문 구 는 항상 Prepared Statement 대상 으로 만들어 효율 을 높 인 다.스테이 트 먼 트 의 하위 클래스 로 서 Prepared Statement 은 스테이 트 먼 트 의 모든 기능 을 계승 합 니 다.또한 IN 매개 변수 자리 표시 자 대신 데이터베이스 에 보 내 는 값 을 설정 하 는 방법 도 추가 했다.또한,세 가지 방법 은 execute,execute Query,execute Update 가 더 이상 인자 가 필요 하지 않도록 변경 되 었 습 니 다.이러한 방법의 Statement 형식(SQL 구문 매개 변 수 를 받 아들 이 는 형식)은 Prepared Statement 대상 에 사용 되 어 서 는 안 됩 니 다.6.1.1 Prepared Statement 대상 이하 의 코드 세그먼트 만 들 기(그 중 con 은 Connection 대상)IN 매개 변수 자리 표시 자 두 개 를 포함 하 는 SQL 문 구 를 만 드 는 Prepared Statement 대상:Prepared Statement pstmt=con.prepareStatement("UPDATE table 4 SET m=?WHERE x = ?");pstmt 대상 포함 문장"UPDATE table 4 SET m=?WHERE x = ?",그것 은 DBMS 에 보 내 졌 고 실행 을 위해 준 비 를 마 쳤 다.6.1.2 IN 매개 변 수 를 전달 하려 면 Prepared Statement 대상 을 실행 하기 전에 각각 설정 해 야 합 니까?매개 변수의 값.이것 은 set XXX 방법 을 호출 하여 완성 할 수 있 습 니 다.그 중에서 XXX 는 이 매개 변수 와 해당 하 는 유형 입 니 다.예 를 들 어 인자 가 자바 형식 롱 을 가지 고 있다 면 사용 하 는 방법 은 setLong 이다.setXXX 방법의 첫 번 째 매개 변 수 는 설정 할 매개 변수의 번호 위치 이 고 두 번 째 매개 변 수 는 이 매개 변수 에 설정 할 값 입 니 다.예 를 들 어 다음 코드 는 첫 번 째 매개 변 수 를 123456789 로 설정 하고 두 번 째 매개 변 수 는 10000000:pstmt.setLong(1,123456789)으로 설정 합 니 다.pstmt.setLong(2, 100000000);주어진 문장의 매개 변수 값 을 설정 하면 clearParameters 방법 으로 지 울 때 까지 이 문 구 를 여러 번 실행 할 수 있 습 니 다.연 결 된 결 성 모드 에서(자동 제출 사용)문장 이 완 료 될 때 자동 으로 이 문장 을 제출 하거나 복원 합 니 다.기본 데이터베이스 와 드라이버 가 문 구 를 제출 한 후에 도 이 문 구 를 여 는 상 태 를 유지 하면 같은 Prepared Statement 을 여러 번 실행 할 수 있 습 니 다.이 점 이 성립 되 지 않 는 다 면,Statement 대상 대신 Prepared Statement 대상 을 사용 해 성능 을 향상 시 키 려 는 것 은 무의미 하 다.pstmt(앞에서 만 든 Prepared Statement 대상)를 이용 하여 다음 코드 는 두 개의 매개 변수 자리 차지 문자 의 값 을 설정 하고 pstmt 10 회 실행 하 는 방법 을 보 여 줍 니 다.위 에서 말 한 바 와 같이 이 를 위해 데이터 베 이 스 는 pstmt 를 닫 을 수 없습니다.이 예제 에서 첫 번 째 매개 변 수 는'Hi'로 설정 되 어 상수 로 유지 된다.for 순환 에서 매번 두 번 째 매개 변 수 를 다른 값 으로 설정 합 니 다.0 부터 9 까지 입 니 다.pstmt.setString(1, "Hi");for (int i = 0; i < 10; i++) {pstmt.setInt(2, i);int rowCount = pstmt.executeUpdate();}6.1.3 IN 매개 변수 에서 데이터 형식의 일치 성 setXXX 방법 중의 XXX 는 자바 형식 입 니 다.이것 은 숨겨 진 JDBC 형식(일반 SQL 형식)입 니 다.드라이버 가 자바 형식 을 해당 하 는 JDBC 형식 으로 표시 하고 이 JDBC 형식 을 데이터베이스 에 보 냅 니 다.예 를 들 어 다음 코드 세그먼트 에 서 는 Prepared Statement 대상 pstmt 의 두 번 째 매개 변 수 를 44 로 설정 하고 자바 형식 은 short:pstmt.setShort(2,44)입 니 다.드라이버 는 44 를 JDBC SMALLINT 로 데이터베이스 에 보 냅 니 다.자바 short 형식의 표준 맵 입 니 다.프로그래머 의 책임 은 각 IN 매개 변수의 자바 형식 을 데이터베이스 에 필요 한 JDBC 데이터 형식 과 호 환 되 는 JDBC 형식 으로 매 핑 하도록 확보 하 는 것 이다.데이터베이스 에 JDBC SMALLINT 가 필요 한 상황 을 고려 해 보 자.setByte 를 사용 하면 드라이버 는 JDBC TINYINT 를 데이터베이스 에 보 냅 니 다.이것 은 가능 합 니 다.많은 데이터 베 이 스 는 관련 유형 에서 다른 유형 으로 전환 할 수 있 고 보통 TINYINT 는 SMALLINT 가 적용 하 는 모든 곳 에 사용 할 수 있 기 때 문 입 니 다.단,가능 한 한 많은 데이터베이스 에 적용 할 응용 프로그램 에 대해 서 는 데이터베이스 에 필요 한 정확 한 JDBC 형식 에 해당 하 는 자바 형식 을 사용 하 는 것 이 좋다.필요 한 JDBC 유형 이 SMALLINT 라면 setByte 대신 setShort 를 사용 하면 응용 프로그램의 이식 성 이 더욱 좋아 집 니 다.6.1.4 setObject 프로 그 래머 를 사용 하면 setObject 방법 으로 입력 파 라미 터 를 특정한 JDBC 형식 으로 현저하게 변환 할 수 있다.이 방법 은 세 번 째 인 자 를 받 아들 여 대상 JDBC 종 류 를 지정 할 수 있 습 니 다.자바 Object 를 데이터베이스 에 보 내기 전에 드라이버 는 지정 한 JDBC 형식 으로 변환 합 니 다.JDBC 형식 이 지정 되 지 않 으 면 드라이버 는 자바 Object 를 결 성 된 JDBC 형식(8.6.4 절 표 참조)에 비 추어 데이터베이스 로 보 냅 니 다.이것 은 일반적인 set XXX 방법 과 유사 합 니 다.이 두 가지 경우 드라이버 는 데이터베이스 에 값 을 보 내기 전에 이 값 의 자바 형식 을 적당 한 JDBC 형식 으로 매 핑 합 니 다.이들 의 차 이 는 setXXX 방법 은 자바 형식 에서 JDBC 형식의 표준 맵(8.6.2 절 표 참조)을 사용 하고 setObject 방법 은 자바 Object 형식 에서 JDBC 형식의 맵(8.6.4 절 표 참조)을 사용 하 는 것 이다.방법 setObject 는 모든 자바 대상 의 능력 을 받 아들 여 프로그램 을 더욱 통용 시 키 고 실행 할 때 매개 변수의 입력 을 받 아들 일 수 있 습 니 다.이 경우 프로그램 이 컴 파일 할 때 입력 형식 을 잘 모 릅 니 다.setObject 를 사용 하면 모든 자바 대상 형식 을 입력 하고 데이터베이스 에 필요 한 JDBC 형식 으로 변환 할 수 있 습 니 다.8.6.5 절 에 있 는 표 는 setObject 가 실행 할 수 있 는 모든 변환 을 보 여 줍 니 다.6.1.5 JDBC NULL 을 IN 매개 변수 로 setNull 방법 을 보 내 면 프로그래머 가 JDBC NULL 값 을 IN 매개 변수 로 데이터베이스 에 보 낼 수 있 습 니 다.그러나 인자 의 JDBC 종 류 를 지정 해 야 합 니 다.자바 null 값 을 set XXX 방법 에 전달 할 때(자바 대상 을 매개 변수 로 받 아들 이면)JDBC NULL 을 데이터베이스 에 보 냅 니 다.그러나 JDBC 형식 을 지정 할 때 만 방법 setObject 는 null 값 을 받 아들 일 수 있 습 니 다.6.1.6 큰 IN 매개 변수 setBytes 와 setString 방법 을 보 내 면 무한 한 데 이 터 를 보 낼 수 있 습 니 다.하지만 프로그래머 들 은 작은 블록 으로 대형 데 이 터 를 전달 하 는 것 을 선 호한 다.이것 은 IN 인 자 를 자바 입력 흐름 으로 설정 해서 완성 할 수 있 습 니 다.문 구 를 실행 할 때 JDBC 드라이버 는 이 입력 흐름 을 반복 적 으로 호출 하여 내용 을 읽 고 실제 매개 변수 데이터 로 전송 합 니 다.JDBC 는 IN 인 자 를 입력 흐름 으로 설정 하 는 세 가지 방법 을 제공 합 니 다.setBinary Stream 은 설명 되 지 않 은 바이트 의 흐름 을 포함 하고 setAsciiStream 은 ASCII 문 자 를 포함 하 는 흐름 에 사용 되 며 setUnicodeStream 은 유 니 코드 문 자 를 포함 하 는 흐름 에 사 용 됩 니 다.흐름 의 총 길 이 를 지정 해 야 하기 때문에 이 방법 들 은 다른 set XXX 방법 보다 매개 변 수 를 하나 더 사용 합 니 다.일부 데이터 베 이 스 는 데 이 터 를 보 내기 전에 전체 전송 크기 를 알 아야 하기 때문이다.다음 코드 는 스 트림 을 IN 매개 변수 로 파일 내용 을 보 냅 니 다.java.io.File file=new java.io.File("/tmp/data");int fileLength = file.length();java.io.InputStream fin = new java.io.FileInputStream(file);java.sql.PreparedStatement pstmt = con.prepareStatement("UPDATE Table5 SET stuff = ? WHERE index = 4");pstmt.setBinaryStream (1, fin, fileLength);pstmt.executeUpdate();문장 이 실 행 될 때 입력 흐름 fin 을 반복 해서 호출 하여 데 이 터 를 전달 합 니 다.

좋은 웹페이지 즐겨찾기