Ho una colonna nel mio database che è stata digitata double
e voglio leggerne il valore utilizzando un ResultSet JDBC, ma potrebbe essere nullo. Qual è il modo migliore per fare questo? Posso pensare a tre opzioni nessuna delle quali sembra molto buona.Come faccio a leggere in JDBC un possibile doppio valore null da resultSet?
Opzione 1: Bad perché la gestione delle eccezioni verbose e puzzolente
double d;
try {
d = rs.getDouble(1);
// do something
} catch(SQLException ex) {
if(rs.wasNull()) {
// do something else
} else {
throw ex;
}
}
Opzione 2: Bad perché due recuperi
s = rs.getString(1); // or getObject()
if(s == null) {
// do something else
} else {
double d = rs.getDouble(1);
// do something
}
Opzione 3: Bad perché la conversione Java piuttosto che SQL
s = rs.getString(1); // or getObject()
if(s == null) {
// do something else
} else {
double d = Double.parseDouble(s);
// do something
}
Qualche suggerimento su quale strada è migliore o c'è un altro modo migliore? E per favore non dire "Usa Hibernate", sono limitato al codice JDBC solo qui.
omg. grazie però –
nota che non esiste alcuna sqlexception quando si recuperano primitive null da un set di risultati. il valore predefinito per quella primitiva viene restituito in questi casi (0 per int, 0.0 per doppio, ecc ....). Quindi perché .wasNull() è un male necessario. – Matt
Ho avuto la stessa identica reazione di @JosefPfleger una volta che ho realizzato come funziona vanilla JDBC riguardo ai null. Se si desidera continuare a utilizzare l'SQL semplice, sebbene (al contrario dell'adozione di un ORM) ed evitare del tutto questa debacle, suggerisco di usare 'JdbcTemplate 'di Spring, che si prende cura di tutti quei fastidiosi controlli nulli per voi. –