web-dev-qa-db-ja.com

ResultSetに列名が存在するかどうかを確認するにはどうすればよいですか?

ResultSetには動的SQLから返されたデータが含まれているため、ResultSetに特定の列名が含まれているかどうかを判別する方法がある場合たとえば、rs.getString("Column_ABC");を実行してもColumn_ABCが実際に存在しない場合、例外がスローされます。 ResultSetが「Column_ABC」という名前の列からデータを取得できるかどうかをテストするにはどうすればよいですか?

59
Ken Chan

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;
}

私が理解していないのは、なぜこの機能が必要になるのかということです。実行されているクエリまたはストアドプロシージャの結果は既知である必要があります。クエリの列がわかっている必要があります。このような機能が必要なのは、どこかに設計上の問題があることを示している場合があります。

90
Erick Robertson

これがErickの答えよりも効率的かどうかはわかりませんが、簡単です。

String str;

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