developer tip

ResultSet에 열 이름이 있는지 어떻게 확인할 수 있습니까?

copycodes 2020. 12. 5. 10:01
반응형

ResultSet에 열 이름이 있는지 어떻게 확인할 수 있습니까?


ResultSet에 동적 SQL에서 반환 된 데이터가 포함되어 있으므로 ResultSet에 특정 열 이름이 포함되어 있는지 확인하는 방법이 있습니까? 예를 들어, 내가 실행 rs.getString("Column_ABC");했지만 Column_ABC가 실제로 존재하지 않으면 예외가 발생합니다. ResultSet이 "Column_ABC"라는 열에서 데이터를 가져올 수 있는지 어떻게 테스트 할 수 있습니까?


ResultSetMetaData수업을 사용하십시오 .

public static boolean hasColumn(ResultSet rs, String columnName) throws SQLException {
    ResultSetMetaData rsmd = rs.getMetaData();
    int columns = rsmd.getColumnCount();
    for (int x = 1; x <= columns; x++) {
        if (columnName.equals(rsmd.getColumnName(x))) {
            return true;
        }
    }
    return false;
}

내가 이해하지 못하는 것은 왜이 기능이 필요한지입니다. 실행중인 쿼리 또는 저장 프로시 저는 알려진 결과를 가져야합니다. 쿼리 열을 알고 있어야합니다. 이와 같은 기능이 필요하다는 것은 어딘가에 디자인 문제가 있다는 신호일 수 있습니다.


이것이 Erick의 답변보다 다소 효율적인지 확실하지 않지만 더 쉽습니다.

String str;

try {
    str = rs.getString(columnName);
} catch (java.sql.SQLException e) {
    str = null;
}

/**
 * returns default value if column is not present in resultset
 * 
 * @param rs
 * @param columnLabel
 * @param defaultValue
 * @return
 */
@SuppressWarnings("unchecked")
private static <T> T getValueFromResultSet(final ResultSet rs,
        String columnLabel, T defaultValue) {
    try {
        return (T) rs.getObject(columnLabel);
    } catch (SQLException e) {
        return defaultValue;
    }
}

Java 버전> = 7에서는 ResultSet # getObject 메소드에 클래스 유형을 전달하는 옵션이 있습니다.


rs.getString ( "Column_ABC") = 아무것도 아니라면 '여기에 코드를 입력하십시오.

참고 URL : https://stackoverflow.com/questions/3599861/how-can-i-determine-if-the-column-name-exist-in-the-resultset

반응형