Veritabanımda double
yazılan bir sütunu var ve bir JDBC ResultSet kullanarak değeri okumak istiyorum, ancak boş olabilir. Bunu yapmanın en iyi yolu nedir? Hiçbiri pek iyi görünmeyen üç seçenek düşünebilirim.JDBC'de resultSet'den null bir çift değer okuyabilir miyim?
Seçenek 1: Kötü istisna ayrıntılı ve kötü kokulu
double d;
try {
d = rs.getDouble(1);
// do something
} catch(SQLException ex) {
if(rs.wasNull()) {
// do something else
} else {
throw ex;
}
}
Seçenek 2 taşıma çünkü: Kötü çünkü iki getirmelere
s = rs.getString(1); // or getObject()
if(s == null) {
// do something else
} else {
double d = rs.getDouble(1);
// do something
}
Seçenek 3: Kötü Java yerine SQL dönüşüm nedeniyle
s = rs.getString(1); // or getObject()
if(s == null) {
// do something else
} else {
double d = Double.parseDouble(s);
// do something
}
Hangi yolla daha iyi bir öneride bulunulur, yoksa başka bir üstünlük var mı? Ve lütfen "Hazırda Beklet" seçeneğini söyleme, sadece burada JDBC koduyla sınırlıyım.
double d = rs.getDouble(1);
if (rs.wasNull()) {
// do something
} else {
// use d
}
Çok hoş bir şey değil, ama bu JDBC var:
OMG. –
olmasına rağmen, sonuç kümesindeki boş ilkelleri alırken hiçbir sqlexception bulunmadığını unutmayın. Bu ilkel için varsayılan değer bu gibi durumlarda iade edilir (int için 0, çift için 0,0, vb ....). Bu yüzden neden. WasNull() gerekli bir kötülüktür. – Matt
Vanilya JDBC'nin null değerleriyle nasıl çalıştığını farkettiğimde, bir kez daha @JosefPfleger ile aynı tepkiyi verdim. Eğer düz SQL kullanmaya devam etmek istiyorsanız (bir ORM'yi benimsemenin aksine) ve bu debacle'ı tamamen ortadan kaldırmak istiyorsanız, Spring'in JdbcTemplate'ünü kullanmanızı tavsiye ederim, ki bu sizin için tüm bu sinir bozucu çekleri halleder. –