ResultSet

강찬우·2023년 11월 8일

혼자공부

목록 보기
3/14

PreparedStatement에서 자동으로 증가된 키를 가져오기위해서

try {
            this.preparedStatement = this.connection.prepareStatement(this.query, Statement.RETURN_GENERATED_KEYS);
            setParameters();
            this.preparedStatement.executeUpdate();
            ResultSet generatedKeys = this.preparedStatement.getGeneratedKeys();

            if (generatedKeys.next()) {
                newId = generatedKeys.getLong(1);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

위 코드를 실행시켜 보다가 이해가지않는 부분이 있어서 공부하게 되었다.

ResultSet

Resultset 인터페이스는 select문을 executeQuery()메소드로 실행한 다음 반환되는 레코드셋을 저장한다. 레코드셋은 가상의 데이터베이스 테이블 형태이다.

select문을 이용해서 데이터를 가져올 때는 ResultSet객체에 데이터를 저장해야한다.

ResultSet의 구조

  • 커서(cursor)를 가지고 있어 커서가 ResultSet객체가 가져올 수 있는 행의 위치를 정해준다.
  • 처음에는 커서가 결과물의 위치에 있지 않기때문에 next()를 이용해서 이동시켜줘야한다.
  • next()의 리턴 타입은 Boolean이다.

-> 처음에 ResultSet을 사용할때 커서라는 개념이 있는 것도 몰랐고 그 때문에 next()메서드가 단순히 다음 레코드가 존재하는지 판단하는 메서드라 생각해 이해하지 못했다.

ResultSet.next()

  • ResultSet으로부터 레코드를 읽어 오기위해서는 일단 레코드의 위치로 커서를 이동시켜야 하는데 그 역할을 하는것이 next()이다. 그 뿐 아니라 그 위치에 레코드가 있는지에 대한 판단여부도 true와 false로 리턴해준다.

  • next()는 단순히 커서를 이동시켜주고 레코드의 존재여부에 대한 판단만을 하기 때문에 값을 읽어 오기 위해서는 getXXXX() 메서드를 사용해야한다

ResultSet.getXXXXX()

  • next()로 커서를 이동시킨후 값을 가져오기 위한 메서드

  • getXXXX는 다양한 타입을 지원하기 때문에 자료형 타입에 따라 호출하면된다.

  • getXXX() 의 인자로는 인덱스 번호나 필드이름을 전달 해 줄 수있다. 인덱스는 1부터 시작.

0개의 댓글