39

データベースに型指定された列があり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: SQL 変換ではなく Java が原因で悪い

s = rs.getString(1); // or getObject()
if(s == null) {
  // do something else
} else {
  double d = Double.parseDouble(s);
  // do something
}

どちらの方法が優れているか、または別の優れた方法について何か提案はありますか? また、「Hibernate を使用する」とは言わないでください。ここでは JDBC コードのみに制限されています。

4

5 に答える 5

60

オプション 1 が最も近い:

double d = rs.getDouble(1);
if (rs.wasNull()) {
  // do something
} else {
  // use d
}

あまりいいとは言えませんが、それが JDBC です。列が null の場合、double 値は「悪い」と見なされるためwasNull()、データベースで null 許容のプリミティブを読み取るたびに、使用を確認する必要があります。

于 2009-07-09T12:17:06.653 に答える
19

JDBCドライバーとデータベースによっては、ボックス化されたタイプを使用してキャストできる場合があります。

Double doubleValueOrNull = (Double)rs.getObject(1); // or .getObject("columnName")

null列がだった場合になりますNULL

データベースを変更した場合でも、これが機能することを確認するように注意してください。

于 2012-12-12T13:40:43.417 に答える