web-dev-qa-db-fra.com

Comment puis-je déterminer si le nom de la colonne existe dans le ResultSet?

Comme le ResultSet contient les données renvoyées par le SQL dynamique, s'il existe une méthode pour déterminer si le ResultSet contient un nom de colonne particulier? Par exemple, si j'exécute rs.getString("Column_ABC"); mais que Column_ABC n'existe pas vraiment, il lèvera l'exception. Comment puis-je tester si le ResultSet peut obtenir des données d'une colonne nommée "Column_ABC"?

59
Ken Chan

tilisez la classe 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;
}

La chose que je ne comprends pas, c'est pourquoi cette fonction serait jamais nécessaire. La requête ou la procédure stockée en cours d'exécution doit avoir des résultats connus. Les colonnes de la requête doivent être connues. Avoir besoin d'une fonction comme celle-ci peut être le signe qu'il y a un problème de conception quelque part.

90
Erick Robertson

Je ne sais pas si c'est plus ou moins efficace que la réponse d'Erick mais c'est plus facile.

String str;

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