どのように私は、JDBCでたresultSetからnullの可能性がdouble値を読みますか。
質問
私はdouble
に入力され、私のデータベース内の列を持っていると私は、JDBC ResultSetを使用して、それから値を読みたいが、それはnullの場合もあります。これを行うための最善の方法は何ですか?私は非常に良いように見えるいずれも3つのオプションを考えることができます。
オプション1:悪いため、例外処理冗長と臭い
double d;
try {
d = rs.getDouble(1);
// do something
} catch(SQLException ex) {
if(rs.wasNull()) {
// do something else
} else {
throw ex;
}
}
オプション2:悪いので、2回のフェッチ
s = rs.getString(1); // or getObject()
if(s == null) {
// do something else
} else {
double d = rs.getDouble(1);
// do something
}
オプション3:悪いJavaはなく、ためにSQL変換
s = rs.getString(1); // or getObject()
if(s == null) {
// do something else
} else {
double d = Double.parseDouble(s);
// do something
}
の方法が優れている、または別の優れた方法がされている任意の提案ですか?そして、私はここでしかJDBCコードに制限しています「利用休止」を言わないでください。
解決
オプション1は最も近います:
double d = rs.getDouble(1);
if (rs.wasNull()) {
// do something
} else {
// use d
}
これは非常にいいではないのですが、それはJDBCです。列がnullだった場合、あなたはそれは、データベース内のNULL可能である原始的な読みwasNull()
を毎回使用して確認する必要がありますので、二重の値は、「悪い」と見なされます。
他のヒント
あなたのJDBCドライバとデータベースによっては、箱入りタイプとキャストを使用することができるかもしれ
Double doubleValueOrNull = (Double)rs.getObject(1); // or .getObject("columnName")
列がnull
れた場合は、これはNULL
されます。
データベースを変更した場合、これはまだ動作をチェックするように注意してください。
使用します。
rs.getObject(1)==null?null:rs.getBigDecimal(1).doubleValue()
またはJava 8で、あなたがこれを行うことができます:
Double dVal = Optional.ofNullable(resultSet.getBigDecimal("col_name"))
.map(BigDecimal::doubleValue).orElse(null));
KotlinのバージョンがNULL可能フィールドを取得します:
val parentId = resultSet.getObject("parent_id") as Double?
所属していません StackOverflow