CodeGym/Java Course/All lectures for KO purposes/ResultSet을 사용한 고급 작업

ResultSet을 사용한 고급 작업

사용 가능

결과 집합 사용자 정의

최신 JDBC API를 사용하면 개체를 크게 사용자 지정할 수 있습니다.성명그리고결과 집합. 예를 들어,결과 집합데이터베이스의 행을 변경할 수 있습니다.

statement 객체를 생성할 때 우리는 우리의 희망 사항을 전달할 수 있습니다. 이러한 소원은 세 그룹으로 나눌 수 있습니다.

  • 기본 연결 유형
  • 동시 액세스 제어
  • 지속성 및 트랜잭션

이러한 매개변수는 개체를 만들 때 전달할 수 있습니다.성명또는준비된 진술. 예:

Statement statement = connection.createStatement(
    ResultSet.TYPE_FORWARD_ONLY,
    ResultSet.CONCUR_READ_ONLY,
    ResultSet.CLOSE_CURSORS_OVER_COMMIT );

PreparedStatement statement = connection.prepareStatement(sql,
    ResultSet.TYPE_FORWARD_ONLY,
    ResultSet.CONCUR_READ_ONLY,
    ResultSet.CLOSE_CURSORS_OVER_COMMIT);

우리는 이러한 것들을 깊이 연구하지는 않겠지만 다른 사람의 코드에서 비슷한 것을 발견하면 이것이 가능하다는 것을 알고 싶습니다.

결과 집합 유형

ResultSet은 특정 유형일 수 있습니다. 유형은 ResultSet의 일부 특성 및 기능을 정의합니다.

모든 유형이 모든 데이터베이스 및 JDBC 드라이버에서 지원되는 것은 아닙니다. 데이터베이스와 JDBC 드라이버가 사용하려는 유형을 지원하는지 확인해야 합니다. DatabaseMetaData.supportsResultSetType(int type) 메소드는 주어진 유형이 지원되는지 여부에 따라 true 또는 false를 반환합니다 .

작성 당시에는 세 가지 유형의 ResultSet이 있습니다.

  • ResultSet.TYPE_FORWARD_ONLY
  • ResultSet.TYPE_SCROLL_INSENSITIVE
  • ResultSet.TYPE_SCROLL_SENSITIVE

기본 유형은 TYPE_FORWARD_ONLY입니다.

TYPE_FORWARD_ONLY 는 ResultSet이 앞으로만 이동할 수 있음을 의미합니다. 즉, 1행, 2행, 3행 등에서만 이동할 수 있습니다. ResultSet에서는 뒤로 이동할 수 없습니다. 10번째 행을 읽은 후 9번째 행에서 데이터를 읽을 수 없습니다.

TYPE_SCROLL_INSENSITIVE 는 ResultSet이 앞뒤로 이동(스크롤)될 수 있음을 의미합니다. 현재 위치를 기준으로 상대 위치로 이동하거나 절대 위치로 이동할 수도 있습니다.

이 유형의 ResultSet는 ResultSet가 열려 있는 동안 기본 데이터 소스에 대한 변경 사항에 영향을 받지 않습니다 . 즉, ResultSet의 항목이 다른 스레드나 프로세스에 의해 데이터베이스에서 변경되면 이미 열려 있는 데이터베이스에는 반영되지 않습니다.결과 집합이 유형의.

TYPE_SCROLL_SENSITIVE는 ResultSet이 앞뒤로 이동(스크롤)될 수 있음을 의미합니다. 현재 위치를 기준으로 상대 위치로 이동하거나 절대 위치로 이동할 수도 있습니다.

이 유형의 ResultSet는 ResultSet가 열려 있는 동안 기본 데이터 소스의 변경 사항에 민감합니다 . 즉, ResultSet의 항목이 다른 스레드나 프로세스에 의해 데이터베이스에서 변경되면 이미 열려 있는결과 집합이 유형의.

동시성

ResultSet의 동시성은 ResultSet이 업데이트될 수 있는지 아니면 읽기만 가능한지를 결정합니다.

일부 데이터베이스 및 JDBC 드라이버는 ResultSet 업데이트를 지원하지만 전부는 아닙니다. DatabaseMetaData.supportsResultSetConcurrency(int concurrency) 메서드는 주어진 동시성 모드가 지원되는지 여부에 따라 true 또는 false를 반환합니다 .

ResultSet은 다음 두 수준의 동시성 중 하나를 가질 수 있습니다.

  • 결과 집합.CONCUR_READ_ONLY
  • ResultSet.CONCUR_UPDATABLE

CONCUR_READ_ONLY 는 ResultSet이 읽기만 가능함을 의미합니다.

CONCUR_UPDATABLE은 ResultSet을 읽고 수정할 수 있음을 의미합니다.

데이터베이스에서 데이터를 변경하는 예

이러한 매개변수를 사용하여 생성된 Statement 및 해당 ResultSet를 제어할 수 있습니다.

예를 들어 업데이트 가능한 ResultSet를 만들고 이를 사용하여 데이터베이스를 변경할 수 있습니다. 문을 만들 때 다음 조건을 준수하는 것이 중요합니다.

  • 하나의 테이블만 지정됨
  • 조인 또는 그룹 기준 절을 포함하지 않음
  • 쿼리 열은 기본 키를 포함해야 합니다.

위의 조건이 충족되면 업데이트된 ResultSet을 사용하여 데이터베이스의 테이블을 업데이트할 수 있습니다. Statement 객체를 생성할 때 다음 매개변수를 지정해야 합니다.

Statement st = createStatement(Result.TYPE_SCROLL_INSENSITIVE, Result.CONCUR_UPDATABLE)

이러한 문을 실행한 결과는 업데이트 가능한 결과 집합입니다. 업데이트 방법은 ResultSet 커서를 업데이트하려는 행으로 이동한 다음 updateXXX () 메서드를 호출하는 것입니다 .

updateXXX 메서드는 getXXX() 메서드 와 유사하게 작동합니다 . updateXXX() 메소드에는 두 개의 매개변수가 있습니다. 첫 번째는 업데이트 중인 열의 번호이며 열 이름 또는 일련 번호일 수 있습니다. 두 번째는 업데이트해야 하는 데이터이며 이 데이터 유형은 XXX와 동일해야 합니다.

실제로 데이터베이스의 행을 업데이트하려면 ResultSet 커서가 변경된 행을 떠나기 전에 updateRow() 메서드 를 호출해야 합니다 . 그렇지 않으면 변경 사항이 데이터베이스에 적용되지 않습니다.

테이블에 새 행을 추가할 수도 있습니다.

먼저 커서를 빈 줄로 이동해야 합니다. 이렇게 하려면 moveToInsertRow() 메서드를 호출합니다 .

그런 다음 updateXXX() 메서드를 사용하여 이 행을 데이터로 채워야 합니다 .

그런 다음 inserterRow() 메서드를 호출하여 기본에 행을 추가 해야 합니다 .

마지막으로 moveToCurrentRow() 메서드를 호출하여 커서를 다시 반환해야 합니다 .

중요한! 모든 DBMS가 확장 문에 대해 이러한 옵션을 지원하는 것은 아닙니다. 문제가 있는 경우 특정 DBMS의 공식 문서를 참조하십시오.

코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다