5-ResultSet 본 개술 은《JDBCTM Database Access from JavaTM:A Tutorial and Annotated Reference》라 는 책 에서 발췌 한 것 이다.자바 소프트 는 현재 이 책 을 준비 하고 있다.이것 은 튜 토리 얼 이자 JDBC 의 중요 한 참고 수첩 으로 자바 시리즈 의 구성 부분 으로 1997 년 봄 에 Addison-Wesley 출판사 에서 출판 될 것 이다.5.1 요약 ResultSet 은 SQL 문장의 조건 에 맞 는 모든 줄 을 포함 하고 get 방법(이 get 방법 들 은 현재 줄 의 다른 열 에 접근 할 수 있 습 니 다)을 통 해 이 줄 의 데이터 에 대한 접근 을 제공 합 니 다.ResultSet.next 방법 은 ResultSet 의 다음 줄 로 이동 하여 다음 줄 을 현재 줄 로 만 드 는 데 사 용 됩 니 다.결과 집합 은 일반적으로 하나의 표 로 되 돌아 오 는 열 제목 과 해당 하 는 값 을 조회 합 니 다.예 를 들 어 SELECT a,b,c FROM Table 1 로 조회 하면 결과 집 은 다음 과 같은 형식 을 가진다.이 SQL 문 구 는 줄 집합 을 되 돌려 줍 니 다.그 중에서 1 은 int 이 고 2 는 String 이 며 3 은 바이트 배열 입 니 다.java.sql.Statement stmt=conn.createStatement();ResultSet r = stmt.executeQuery("SELECT a, b, c FROM Table1");while(r.next(){/현재 줄 의 값 을 인쇄 합 니 다.int i = r.getInt("a");String s = r.getString("b");float f = r.getFloat("c");System.out.println("ROW = " + i + " " + s + " " + f);}5.1.1 줄 과 커서 ResultSet 유지보수 가 현재 데이터 줄 을 가리 키 는 커서 입 니 다.next 방법 을 호출 할 때마다 커서 가 한 줄 아래로 이동 합 니 다.처음에는 첫 줄 앞 에 있 었 기 때문에,첫 번 째 호출 next 는 커서 를 첫 줄 에 놓 고 현재 줄 로 만 듭 니 다.next 를 호출 할 때마다 커서 가 한 줄 아래로 이동 하면 서 위 에서 아래로 ResultSet 줄 을 가 져 옵 니 다.ResultSet 대상 이나 아버지 세대 Statement 대상 이 닫 히 기 전 까지 커서 는 유효 합 니 다.SQL 에서 결과 표 의 커서 는 이름 이 있 습 니 다.데이터베이스 가 포 지 셔 닝 업데이트 나 포 지 셔 닝 삭 제 를 허용 할 경우 커서 의 이름 을 매개 변수 로 업데이트 또는 삭제 명령 에 제공 해 야 합 니 다.호출 방법 getCursorName 을 통 해 커서 이름 을 얻 을 수 있 습 니 다.메모:모든 DBMS 가 위치 업데이트 와 삭 제 를 지원 하 는 것 은 아 닙 니 다.DatabaseMetaData.supportsPositionedDelete 와 supportsPositionedUpdate 방법 을 사용 하여 특정 연결 이 이 동작 을 지원 하 는 지 확인 할 수 있 습 니 다.이 동작 을 지원 할 때 DBMS/드라이버 는 위치 업데이트 에 이상 이나 다른 병행 문제 가 발생 하지 않도록 선택 줄 을 적 절 히 잠 그 도록 해 야 합 니 다.5.1.2 열 방법 getXXX 는 현재 줄 의 특정한 열 값 을 가 져 오 는 경 로 를 제공 합 니 다.줄 마다 열 값 을 순서대로 가 져 올 수 있 습 니 다.그러나 이식 성 을 확보 하기 위해 서 는 왼쪽 에서 오른쪽으로 열 값 을 가 져 오고 열 값 을 한꺼번에 읽 어야 한다.열 이름 이나 열 번 호 는 데 이 터 를 가 져 올 열 을 표시 하 는 데 사용 할 수 있 습 니 다.예 를 들 어 ResultSet 대상 rs 의 두 번 째 열 이름 이"title"이 고 값 을 문자열 로 저장 하면 다음 코드 는 이 열 에 저 장 된 값 을 가 져 옵 니 다:String s=rs.getString("title").String s = rs.getString(2);주의 열 은 왼쪽 에서 오른쪽으로 번 호 를 매 기 며 열 1 부터 시작 합 니 다.또한 getXXX 방법 으로 입력 한 열 이름 은 대소 문 자 를 구분 하지 않 습 니 다.열 이름 을 사용 하 는 이 옵션 을 제공 하 는 목적 은 검색 에서 열 이름 을 지정 한 사용자 가 같은 이름 을 getXXX 방법의 매개 변수 로 사용 할 수 있 도록 하 는 것 입 니 다.다른 한편,selection 문 구 는 열 이름 을 지정 하지 않 으 면(예 를 들 어"select*from table 1"이나 열 이 내 보 낼 때)열 번 호 를 사용 해 야 합 니 다.이 경우 사용 자 는 열 이름 을 정확히 알 수 없 을 것 이다.어떤 경우 에는 SQL 조회 가 되 돌아 오 는 결과 에 여러 열 이 같은 이름 을 가 질 수 있 습 니 다.열 이름 이 getXXX 방법의 매개 변수 로 사용 되면 getXXX 는 첫 번 째 열 이름 과 일치 하 는 값 을 되 돌려 줍 니 다.따라서 여러 열 이 같은 이름 을 가지 고 있다 면 열 색인 을 사용 하여 정확 한 열 값 을 검색 해 야 한다.이때 열 번 호 를 사용 하 는 효율 이 약간 높다.ResultSet 에 열 거 된 정 보 는 호출 방법 ResultSet.getMetaData 를 통 해 얻 을 수 있 습 니 다.돌아 오 는 ResultSetMetaData 대상 은 ResultSet 대상 각 열의 번호,유형,속성 을 보 여 줍 니 다.열 이름 은 알 고 있 지만 색인 을 모 르 면 findColumn 에서 열 번 호 를 얻 을 수 있 습 니 다.5.1.3 데이터 형식 과 getXXX 변환 방법 에 대해 JDBC 드라이버 는 기본 데 이 터 를 지정 한 자바 형식 으로 변환 한 다음 에 적합 한 자바 값 을 되 돌려 주 려 고 합 니 다.예 를 들 어 getXXX 방법 이 getString 이 고 기본 데이터베이스 에 있 는 데이터 형식 이 VARCHAR 이면 JDBC 드라이버 는 VARCHAR 를 자바 String 으로 변환 합 니 다.getString 의 반환 값 은 자바 String 대상 입 니 다.아래 표 는 getXXX 로 가 져 올 수 있 는 JDBC 형식 과 추천 하 는 JDBC 형식(일반 SQL 형식)을 보 여 줍 니 다.소문 자 x 는 getXXX 방법 으로 이 데이터 형식 을 가 져 올 수 있 음 을 표시 합 니 다.대문자 X 는 이 데이터 형식 에 대해 getXXX 방법 을 추천 합 니 다.예 를 들 어 getBytes 와 getBinary Stream 을 제외 한 모든 getXXX 방법 은 LONGVARCHAR 값 을 얻 을 수 있 지만 되 돌아 오 는 데이터 형식 에 따라 getAsciiStream 이나 getUnicodeStream 방법 을 사용 하 는 것 을 추천 합 니 다.방법 getObject 는 모든 데이터 형식 을 자바 Object 로 되 돌려 줍 니 다.기본 데이터 형식 이 데이터베이스 에 특정한 추상 적 인 형식 이거 나 유 니 버 설 응용 프로그램 이 모든 데이터 형식 을 받 아들 여야 할 때 매우 유용 하 다.ResultSet.getXXX 방법 으로 흔히 볼 수 있 는 JDBC 데이터 형식 을 가 져 올 수 있 습 니 다."x"이 getXXX 방법 은 주어진 JDBC 형식 을 가 져 오 는 데 합 법 적 으로 사용 할 수 있 음 을 나타 낸다."X"는 이 getXXX 방법 으로 주어진 JDBC 형식 을 가 져 오 는 것 을 추천 합 니 다. TIYIT SMALLIT ITEGER BIGNT REAL FLOAT DOULE DECIMAL NUMERIC BIT CHAR VARCHARLOGVARCHAR BIARY VARIARY LOGVARIARY DATE TIME TIMETAMgetByte X x x x x x x x x x x x x getShort x X x x x x x x x x x x x getInt x x X x x x x x x x x x x getLong x x x X x x x x x x x x x getFloat x x x x X x x x x x x x x getDouble x x x x x X X x x x x x x getBigDecimal x x x x x x x X X x x x x getBoolean x x x x x x x x x X x x x getString x x x x x x x x x x X X x x x x x x x getBytes X X x getDate x x x X x getTime x x x X x getTimestamp x x x x X getAsciiStream x x X x x x getUnicodeStream x x x x x x x x x getBinary Stream x x x x getObject x x x x x x x x x x x x x x x x x x x x x x x x x x 5.1.4 매우 큰 줄 값 사용 흐름 ResultSet 은 임의의 큰 LONGVARBINARY 또는 LONGVARCHAR 데 이 터 를 얻 을 수 있 습 니 다.방법 getBytes 와 getString 은 데 이 터 를 큰 블록 으로 되 돌려 줍 니 다(최대 Statement.getMaxFieldSize 의 반환 값).그러나 작은 고정 블록 으로 큰 데 이 터 를 얻 는 것 이 더 편리 할 수 있 습 니 다.이 는 ResultSet 류 를 자바.io.Input 흐름 으로 되 돌려 줍 니 다.이 흐름 에서 블록 을 나 누 어 데 이 터 를 읽 을 수 있 습 니 다.메모:다음 ResultSet 에서 getXXX 를 호출 할 때 자동 으로 닫 히 기 때문에 이 흐름 에 즉시 접근 해 야 합 니 다.JDBC API 는 세 가지 흐름 을 가 져 오 는 방법 을 가지 고 있 습 니 다.각각 다른 반환 값 을 가지 고 있 습 니 다.getBinary Stream 은 데이터베이스 원본 바이트 만 제공 하고 변환 하지 않 는 흐름 을 되 돌려 줍 니 다.getAsciiStream 은 단일 바이트 ASCII 문 자 를 제공 하 는 흐름 을 되 돌려 줍 니 다.getUnicodeStream 은 두 바이트 유 니 코드 문 자 를 제공 하 는 흐름 을 되 돌려 줍 니 다.메모:자바 흐름 과 다 릅 니 다.후 자 는 형식 이 없 는 바이트 로 돌아 가 ASCII 와 유 니 코드 문자 에 사용 할 수 있 습 니 다.다음 코드 는 getAsciiStream 의 용법 을 보 여 줍 니 다:java.sql.Statement stmt=con.createStatement();ResultSet r = stmt.executeQuery("SELECT x FROM Table2");// 현재 4K 블록 크기 로 열 1 결 과 를 가 져 옵 니 다:byte buff=new byte[4096];while (r.next()) {Java.io.InputStream fin = r.getAsciiStream(1);for (;;) {int size = fin.read(buff);if(size==-1){//흐름 끝 에 도달 break;}//새로 채 워 진 버퍼 를 ASCII 출력 흐름 으로 보 냅 니 다:output.write(buff,0,size);}}5.1.5 NULL 결과 값 이 주어진 결과 값 이 JDBC NULL 인지 확인 하려 면 이 열 을 먼저 읽 은 다음 ResultSet.wasNull 방법 으로 읽 기 가 JDBC NULL 로 되 돌아 가 는 지 확인 해 야 합 니 다.Resultset.getXXX 방법 으로 JDBC NULL 을 읽 을 때 방법 wasNull 은 다음 값 중 하 나 를 되 돌려 줍 니 다.자바 null 값:자바 대상 을 되 돌려 주 는 getXXX 방법(예 를 들 어 getString,getBigDecimal,getBytes,getDate,getTime,getTimestamp,getAsciiStream,getUnicodeStream,getBinary Stream,getObject 등).0 값:getByte,getShort,getInt,getLong,getFloat 와 getDouble.false 값:getBoolean 에 대해.5.1.6 선택 가능 한 결과 집합 이나 다 중 결과 집합 은 보통 executeQuery(단일 ResultSet 로 되 돌아 갑 니 다)또는 executeUpdate(데이터베이스 수정 문 구 를 사용 하고 업데이트 줄 수 를 되 돌려 줍 니 다)를 사용 하여 SQL 문 구 를 실행 할 수 있 습 니 다.그러나 일부 경우 응용 프로그램 은 실행 문 구 를 실행 하기 전에 이 문 구 를 결과 집합 으로 되 돌려 줄 지 여 부 를 모른다.그 밖 에 일부 저장 과정 은 몇 개의 서로 다른 결과 집합 과/또는 업데이트 수 를 되 돌려 줄 수 있 습 니 다.이러한 상황 에 적응 하기 위해 JDBC 는 응용 프로그램의 실행 문 구 를 허용 하고 결과 집합 과 업데이트 계수 로 구 성 된 임의의 집합 을 처리 하 는 메커니즘 을 제공 했다.이 메커니즘 의 원 리 는 먼저 완전히 통용 되 는 execute 방법 을 호출 한 다음 에 다른 세 가지 방법,getResultSet,getUpdateCount 와 getMore Results 를 호출 하 는 것 이다.이 방법 들 은 응용 프로그램 이 구문 결 과 를 한 번 에 한 번 씩 연구 하고 주어진 결과 가 ResultSet 인지 업데이트 계수 인지 확인 할 수 있 습 니 다.사용 자 는 ResultSet 를 닫 을 필요 가 없습니다.Statement 이 닫 히 거나 다시 실행 되 거나 다 중 결과 시퀀스 에서 다음 결 과 를 가 져 올 때 이 ResultSet 은 Statement 에 의 해 자동 으로 닫 힙 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: