SQL문을 통해 얻은 데이터에서 첫번째행에서 마지막 행까지를 추출할때나 행이 있는지 없는지 판단할때
주로 while문을 통해 rs.next()가 사용된다.
while (rs.next()) {
String coffeeName = rs.getString("COF_NAME");
int supplierID = rs.getInt("SUP_ID");
float price = rs.getFloat("PRICE");
int sales = rs.getInt("SALES");
int total = rs.getInt("TOTAL");
System.out.println(coffeeName + ", " + supplierID + ", " + price +
", " + sales + ", " + total);
}
요딴식으로 이용된다.
하지만 여기서 한가지 의문점이 든다.
rs.next()는 다음 커서로 옮기고 없다면 false라는 뜻인데 그러면 첫번째 행이 생략되는것 아닌가 하는 의문점이 생긴다.
왜냐하면 기본적으로 처음 resultset의 기본 위치가 첫번째 행이라고 생각하기때문이다.
따라서 rs.next()를 하면 첫번째행은 무시하고 두번째 행부터 출력되지 않나 생각하게된다.
하지만 이는 맞지않다.
rs.next의 기본 위치는 첫번째 행의 앞에 있다. 이에 대한 내용은 오라클 문서에서 확인 할 수 있는데
https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html
ResultSet (Java Platform SE 7 )
Retrieves the value of the designated column in the current row of this ResultSet object as a boolean in the Java programming language. If the designated column has a datatype of CHAR or VARCHAR and contains a "0" or has a datatype of BIT, TINYINT, SMALLIN
docs.oracle.com
Initially the cursor is positioned before the first row : 처음에 커서는 첫번째 행 앞에 있다.
즉 맨처음, 기본 커서 위치는 첫번째 행 앞에 있다.
따라서 rs.next를 통해 행이 있는지 없는지 확인할 수 있는것이다.
한편 찝찝한 기분이 들 수 있다. 아니 근데 왜 기본 커서 위치가 첫번째가 아니라 첫번째 행 앞에 해두었냐고.
그 이유는 마찬가지로 위의 링크(오라클 문서)에서 확인 할 수 있는데
The next method moves the cursor to the next row, and because it returns false when there are no more rows in the ResultSet object, it can be used in a while loop to iterate through the result set.
(대충 next()메소드 때문에 기본 커서 위치를 첫번째 행 앞으로가게 만들었다라는 뜻)
next()메소드를 염두하고 기본 커서 위치를 첫번째 행 앞에 두게 설계한것같다.
즉 rs.next()의 기본 위치가 첫번째 행의 앞에 있는 것은 next() 메소드를 사용하기 위해 만들어진것이라 할 수 있을 것 같다.
'2022 > Java' 카테고리의 다른 글
String 대문자 변환,String char[] 배열로 변환, 소문자->대문자,대문자->소문자 (0) | 2022.07.07 |
---|---|
JDK 버전 별로 받는 사이트,Path 설정법 (0) | 2022.01.02 |
Java 종료 선언하기 전까지 무한으로 메뉴 실행 (0) | 2021.12.25 |
Java 종료 (0) | 2021.12.25 |
Java Scanner 입력, 정수, 문자열 (0) | 2021.12.25 |