J'ai une colonne dans ma base de données qui est tapée double
et je veux lire la valeur à l'aide d'un ResultSet JDBC, mais il peut être nul. Quelle est la meilleure façon de faire cela? Je peux penser à trois options dont aucune ne semble très bonne.Comment puis-je lire dans JDBC une double valeur éventuellement nulle à partir de resultSet?
Option 1: Bad parce que la gestion des exceptions verbeux et malodorante
double d;
try {
d = rs.getDouble(1);
// do something
} catch(SQLException ex) {
if(rs.wasNull()) {
// do something else
} else {
throw ex;
}
}
Option 2: Bad parce que deux récupérations
s = rs.getString(1); // or getObject()
if(s == null) {
// do something else
} else {
double d = rs.getDouble(1);
// do something
}
Option 3: Bad parce que la conversion Java plutôt que SQL
s = rs.getString(1); // or getObject()
if(s == null) {
// do something else
} else {
double d = Double.parseDouble(s);
// do something
}
Des suggestions sur la façon dont est le meilleur, ou y at-il une autre façon supérieure? Et s'il vous plaît ne dites pas "Use Hibernate", je suis limité au code JDBC seulement ici.
omg. merci bien que –
note qu'il n'y a pas de sqlexception lors de la récupération des primitives NULL à partir d'un ensemble de résultats. la valeur par défaut pour cette primitive est retournée dans de tels cas (0 pour int, 0.0 pour double, etc ....). D'où pourquoi .wasNull() est un mal nécessaire. – Matt
J'ai eu exactement la même réaction que @JosefPfleger une fois que j'ai réalisé comment fonctionne JDBC à l'égard des zéros. Si vous voulez continuer à utiliser le SQL simple, (et non pas adopter un ORM) et éviter cette débâcle, je suggère d'utiliser 'JdbcTemplate' de Spring, qui s'occupe de toutes ces vérifications nuls pour vous. –