programing

Java Result 결과가 있는지 확인하는 방법을 설정합니다.

coolbiz 2022. 7. 3. 18:04
반응형

Java Result 결과가 있는지 확인하는 방법을 설정합니다.

결과 집합에는 hasNext 메서드가 없습니다.resultSet에 값이 있는지 확인하고 싶다.

이 길이 맞습니까?

if (!resultSet.next() ) {
    System.out.println("no data");
} 

새로 반환된 제품을 사용하고 있다고 가정합니다.ResultSet가 첫 행 앞에 , 쉬운 은, 「커서가 첫 번째 행 앞에 있는 경우」, 「커서가 가리키다」, 「커서가 가리키다」를 하는 것입니다.isBeforeFirst()이렇게 하면 데이터를 읽을 때 역추적할 필요가 없어집니다.

설명서에서 설명한 바와 같이 커서가 첫 번째 레코드 앞에 있지 않거나 ResultSet에 행이 없는 경우 false가 반환됩니다.

if (!resultSet.isBeforeFirst() ) {    
    System.out.println("No data"); 
} 

 

에는 '아예'입니다. 처음에ResultSet첫 번째 행 앞에 있는 은 " " " 입니다.next()false 이 자료에는 요.ResultSet.

, 해야 할 도 있습니다.beforeFirst()리셋 직후에, 첫 번째 행이 지나갔기 때문에 리셋을 실시합니다.

그러나 아래의 Seifer의 답변이 이 질문에 대한 보다 우아한 해결책이라는 점에 유의해야 합니다.

다음 루프 체크는 언제든지 할 수 있습니다.

if (!resultSet.next() ) {
    System.out.println("no data");
} else {

    do {
     //statement(s)
    } while (resultSet.next());
}

커서 위치에 관계없이 결과 세트가 비어 있는지 여부를 완전히 확인하기 위해 다음과 같은 작업을 수행합니다.

public static boolean isMyResultSetEmpty(ResultSet rs) throws SQLException {
    return (!rs.isBeforeFirst() && rs.getRow() == 0);
}

이 함수는 ResultSet이 비어 있으면 true를 반환하고, 그렇지 않으면 false를 반환하며, ResultSet이 닫혀 있거나 초기화되지 않은 경우에는 SQLException을 슬로우합니다.

보통 다음과 같은 작업을 수행합니다.

while ( resultSet.next() ) { 
   // Read the next item
   resultSet.getString("columnName");
}

빈 세트를 보고하려면 읽은 항목을 카운트하는 변수를 추가하십시오.한 항목만 읽으면 되는 경우 코드만 읽으면 됩니다.

ResultSet.next()와 do {...}를 함께 사용하는 것이 좋습니다.이 경우 } while() 구문입니다.

"Check for any results" 호출 ResultSet.next()는 커서를 첫 번째 행으로 이동시키므로 실행 {...루프가 반환하는 나머지 행을 계속 처리하면서 해당 행을 처리하는 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()를 사용하는 것이 좋습니다.「전송 전용 타입」이 없는 경우는, 최적인 솔루션이 아닙니다.

'.first()'라는 방법이 있어요.똑같은 결과를 얻으려면 과잉 살상이 덜해"결과 집합"에 뭔가가 있는지 확인하고 커서를 이동하지 마십시오.

문서에는 "결과 세트에 행이 없으면 (...) false"라고 기재되어 있습니다.

if(rs.first()){
    //do stuff      
}

커서를 이동하지 않고 is Before First()를 호출하여 행이 반환되었는지 테스트한 후 정상적으로 진행할 수도 있습니다.– SnakeDoc 2014년 9월 2일 19:00

단, is Before First()와 first() 사이에는 차이가 있습니다.먼저 "forward only" 유형의 결과 집합에 대해 수행된 경우 예외를 생성합니다.

2개의 슬로우 섹션을 비교합니다.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()"를 사용하는 것이 덜 오버킬됩니다.

결과 세트에 yes 행이 있는지 확인하려면 이 방법을 사용합니다.

:next()는 항상 다음 행으로 이동하기 때문에 결과 세트에서 판독을 할 예정이라면 이 점을 고려해야 합니다.

ResultSet(단순히 읽을 경우)에서의 일반적인 사용법은 다음과 같습니다.

while (resultSet.next())
{
   ... read from the row here ...
}

하지 않습니다.next()결과 세트가 비어 있는지 확인하기 위해 이미 한 번 확인했으므로 주의해 주세요."백업" 방법은 있지만 모든 유형의 결과 집합에서 지원되는 것은 아닙니다.

이것은 실용적이고 읽기 쉬운 작품이라고 생각합니다.

        if (res.next()) {
            do {

                // successfully in. do the right things.

            } while (res.next());
        } else {
           // no results back. warn the user.
        }

rs.getRow()를 사용하면 어떨까요?

int getRow()
           throws SQLException
Retrieves the current row number. The first row is number 1, the second number 2, and so on.
Note:Support for the getRow method is optional for ResultSets with a result set type of TYPE_FORWARD_ONLY

Returns:
the current row number; 0 if there is no current row
Throws:
SQLException - if a database access error occurs or this method is called on a closed result set
SQLFeatureNotSupportedException - if the JDBC driver does not support this method
Since:
1.2

저는 "if (rs.getRow() != 0)"이 정상적으로 동작하는 것을 확인합니다.

if (!resultSet.isAfterLast() ) {    
System.out.println("No data"); 
} 

isAfterLast()또한 빈 결과 세트에 대해서도 false를 반환하지만 커서가 첫 번째 행 앞에 있기 때문에 이 방법이 더 명확해 보입니다.

if(resultSet.first) {

} else { 
    system.out.println("No raw or resultSet is empty");
}

ResultSet은 raw이기 resultSet.first거짓으로 속이다

데이터를 가져올 때 행을 건너뛰는 실수를 피할 수 있도록 첫 번째 행을 확인하는 것이 가장 좋습니다.예를 들어 (!resultSet.first() {System.out.println("데이터 없음") ; )

resultSet.next()를 사용하면 resultSet에 값이 포함되어 있는지 여부에 관계없이 결과를 쉽게 얻을 수 있습니다.

ResultSet resultSet = preparedStatement.executeQuery();
if(resultSet.next())
 //resultSet contain some values
else
 // empty resultSet
ResultSet result = stmt.executeQuery(sqlQuery);
if (!result.next())
    status = "ERROR";
else
    status = "SUCCESS";

현재 행을 첫 번째 인덱스로 설정하려고 했습니다(기본 키로 처리).제안하고 싶다

if(rs.absolute(1)){
    System.out.println("We have data");
} else {
    System.out.println("No data");
}

결과 세트 번째 행('로 rs.absolute(1)) 행 1에 정상적으로 배치되었음을 나타내는 true가 반환되며 행이 존재하지 않으면 false가 반환됩니다.우리는 이것을 추정할 수 있다

for(int i=1; rs.absolute(i); i++){
    //Code
}

현재 행을 위치 i로 설정하고 행이 존재하지 않으면 실패합니다.이것은 단지 다른 방법일 뿐이다.

while(rs.next()){
    //Code
}

ResultSet이 비어 있는지 확인하기 위해 다음과 같은 메서드를 만들었습니다.

public static boolean resultSetIsEmpty(ResultSet rs){        
    try {
        // We point the last row
        rs.last();
        int rsRows=rs.getRow(); // get last row number

        if (rsRows == 0) {
            return true;
        }

        // It is necessary to back to top the pointer, so we can see all rows in our ResultSet object.
        rs.beforeFirst();
        return false;
    }catch(SQLException ex){            
        return true;
    }
}

다음 사항을 고려하는 것이 매우 중요합니다.

CallableStatement 객체는 ResultSet 객체가 마지막에 가고 맨 위로 돌아가도록 설정해야 합니다.

TYPE_SCROLL_SECTION: ResultSet 객체는 마지막에 이동했다가 맨 위로 돌아갈 수 있습니다.또한 마지막 변경 사항도 파악할 수 있습니다.

CONCER_READ_한정: ResultSet 개체 데이터는 읽을 수 있지만 업데이트할 수 없습니다.

CallableStatement proc = dbconex.prepareCall(select, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

결과 세트를 확인하는 가장 쉬운 방법은 패키지 org.apache.commons.collections 아래의 Collection Utils를 사용하는 것이라고 생각합니다.컬렉션 유틸리티

if(CollectionUtils.isNotEmpty(resultList)){
  /**
  * do some stuff
  */
}

그러면 null 및 빈 결과 집합 조건이 확인됩니다.

상세한 것에 대하여는, 다음의 문서를 참조해 주세요.컬렉션 유틸리티

당신은 이런 것을 할 수 있다.

boolean found = false;

while ( resultSet.next() )
{
    found = true;
    resultSet.getString("column_name");
}

if (!found)
    System.out.println("No Data");
ResultSet rs = rs.executeQuery();
if(rs.next())
{
  rs = rs.executeQuery();
  while(rs.next())
  {
    //do code part
  }
}
else
{
  //else if no result set
}

문의는 재실행하는 것이 좋습니다.왜냐하면,if(rs.next()){....}ResultSet의 첫 번째 행과 그 다음 행이 실행됩니다.while(rs.next()){....}다음 줄에서 결과를 얻을 수 있습니다.그래서 내부 쿼리 재실행은if더 나은 선택입니다.

if (resultSet==null ) {
    System.out.println("no data");
}

경고 하나 하자면

org.springframework.jdbc.core 를 사용하는 경우.RowMapper는 mapRow 메서드에 대해 다음 내용이 적용되므로 ResultSet이 비어 있는지 확인할 때 매우 주의해야 합니다.

이 메서드는 ResultSet에서 next()를 호출하지 않습니다.현재 행의 값만 매핑하도록 되어 있습니다.<- 매뉴얼 참조

이 상황에서, 당신의 수표는 다음과 같은 것이 될 수 있습니다.

resultSet.beforeFirst();
if (!resultSet.next() ) {
    System.out.println("no data");
} 

처음에 결과 세트 오브젝트(rs)는 (첫 번째 기록 전) BFR을 가리킵니다.rs.next()를 사용하면 커서가 첫 번째 레코드를 가리키고 rs는 "true"를 유지합니다.while 루프를 사용하면 테이블의 모든 레코드를 인쇄할 수 있습니다.모든 레코드가 취득되면 커서가 ALR(마지막 레코드 후)로 이동하고 null로 설정됩니다.테이블에는 2개의 레코드가 있다고 생각해 봅시다.

if(rs.next()==false){
    // there are no records found
    }    

while (rs.next()==true){
    // print all the records of the table
    }

즉, while(rs.next())로 조건을 쓸 수도 있습니다.

언급URL : https://stackoverflow.com/questions/867194/java-resultset-how-to-check-if-there-are-any-results

반응형