결과 집합 에는 hasNext에 대한 방법이 없습니다. resultSet에 값이 있는지 확인하고 싶습니다
이것이 올바른 방법입니까?
if (!resultSet.next() ) {
System.out.println("no data");
}
답변
맞습니다. 처음에 ResultSet
커서가 첫 번째 행을 가리키고 있습니다. 첫 번째 호출이 next()
반환 되면에 false
데이터가없는 경우 ResultSet
입니다.
이 방법을 사용하면 전화해야 할 수도 있습니다 beforeFirst()
지금 첫 번째 행을 지나서 위치했기 때문에 재설정 후 즉시 .
그러나 아래 Seifer의 답변 은이 질문에 대한보다 우아한 해결책 이라는 점에 유의해야합니다 .
답변
ResultSet
커서가 첫 번째 행 앞을 가리키는 새로 반환 된 것으로 작업한다고 가정하면 더 쉽게 확인할 수 있습니다 isBeforeFirst()
. 이렇게하면 데이터를 읽을 경우 역 추적 할 필요가 없습니다.
문서에서 설명한대로 커서가 첫 번째 레코드 앞에 있지 않거나 ResultSet에 행이없는 경우 false를 리턴합니다 .
if (!resultSet.isBeforeFirst() ) {
System.out.println("No data");
}
답변
항상 다음 단계를 수행하고 포스트 루프 검사를 수행 할 수 있습니다.
if (!resultSet.next() ) {
System.out.println("no data");
} else {
do {
//statement(s)
} while (resultSet.next());
}
답변
일반적으로 다음과 같은 작업을 수행합니다.
while ( resultSet.next() ) {
// Read the next item
resultSet.getString("columnName");
}
빈 세트를보고하려면 읽은 항목을 세는 변수를 추가하십시오. 단일 항목 만 읽으면 코드가 적합합니다.
답변
커서 위치에 관계없이 결과 집합이 비어 있는지 또는 완전히 비어 있는지 확인하려면 다음과 같이하십시오.
public static boolean isMyResultSetEmpty(ResultSet rs) throws SQLException {
return (!rs.isBeforeFirst() && rs.getRow() == 0);
}
이 함수는 ResultSet가 비어 있으면 true를, 그렇지 않으면 false를 반환하거나 ResultSet이 닫히거나 초기화되지 않은 경우 SQLException을 발생시킵니다.
답변
이를 위해 do {…} while () 구문과 함께 ResultSet.next ()를 사용하는 것이 가장 좋습니다.
“결과 확인”호출 ResultSet.next ()는 커서를 첫 번째 행으로 이동하므로 do {…} while () 구문을 사용하여 해당 행을 처리하고 루프에서 리턴 된 나머지 행을 계속 처리하십시오.
이렇게하면 결과를 확인하면서 동시에 반환 된 결과를 처리 할 수 있습니다.
if(resultSet.next()) { // Checks for any results and moves cursor to first row,
do { // Use 'do...while' to process the first row, while continuing to process remaining rows
} while (resultSet.next());
}
답변
가장 실용적인 대답에 따르면 “isBeforeFirst ()”를 사용하는 것이 좋습니다. “forward only type”이 없으면 최상의 솔루션이 아닙니다 .
” .first () 라는 메소드가 있습니다. ” . 똑같은 결과를 얻는 것은 덜 과잉입니다. “결과”에 무언가가 있는지 확인하고 커서를 움직이지 않습니다.
설명서에는 ” 결과 세트에 행 이 없으면 “(…) false “라고 표시되어 있습니다.
if(rs.first()){
//do stuff
}
isBeforeFirst ()를 호출하여 커서를 진행하지 않고 리턴 된 행이 있는지 테스트 한 후 정상적으로 진행할 수 있습니다. – SnakeDoc 9 월 2 일 14시 19:00
그러나 “isBeforeFirst ()”와 “first ()”에는 차이가 있습니다. “forward only”유형의 결과 집합에서 수행 된 경우 먼저 예외를 생성합니다.
두 개의 던지기 섹션을 비교하십시오.
http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#isBeforeFirst ()
http://docs.oracle.com/javase/7/docs /api/java/sql/ResultSet.html#first ()
기본적으로 이것은 “앞으로 만”유형이있는 한 “isBeforeFirst”를 사용해야한다는 것을 의미합니다. 그렇지 않으면 “first ()”를 사용하는 것이 덜 과도합니다.