Comme ResultSet contient les données renvoyées par le SQL dynamic, s’il existe une méthode permettant de déterminer si le ResultSet contient un nom de colonne particulier? Par exemple, si je lance rs.getSsortingng("Column_ABC");
mais Column_ABC n’existe pas vraiment, il va exclure l’exception. Comment puis-je tester si le ResultSet peut obtenir des données d’une colonne nommée “Column_ABC”?
Utilisez la classe ResultSetMetaData
.
public static boolean hasColumn(ResultSet rs, Ssortingng 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; }
Ce que je ne comprends pas, c'est pourquoi cette fonction serait 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 un signe qu'il y a un problème de conception quelque part.
Je ne suis pas sûr que ce soit plus ou moins efficace que la réponse d’Erick, mais c’est plus facile.
Ssortingng str; try { str = rs.getSsortingng(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 getValueFromResultSet(final ResultSet rs, Ssortingng columnLabel, T defaultValue) { try { return (T) rs.getObject(columnLabel); } catch (SQLException e) { return defaultValue; } }
Dans la version Java> = 7, vous avez la possibilité de passer le type de classe dans la méthode ResultSet # getObject
sinon rs.getSsortingng (“Column_ABC”) = rien alors ‘votre code ici