ResultSetのgetXxxxがプリミティブ型なせいでハマった件(Java)

DB的にはNULLが入っているところを↓のコードで取得したら、
なんとnullではなく0になった。

Double d = rs.getDouble(1);
System.out.println(d);//"0.0"と出力される

確認してみると、getDoubleの戻り値はDoubleではなくdouble…
↓ソース
ResultSet (Java Platform SE 8 )

戻り値:
列値。値がSQL NULLの場合、返される値は0

洗い出したところ、以下メソッドがnullがnull以外を返すようです。

  • getBoolean
  • getByte
  • getShort
  • getInt
  • getLong
  • getFloat
  • getDouble

wasNullなんていうgetXxxxで読み取った後に
それがnullかチェックできるメソッドも用意されてるが、
isNullではなく過去形ってあたりが使いづらい…。

結局、↓で解決した

Double d = (Double)rs.getObject(1);
System.out.println(d);//nullと出力される

結論

JDBCを直接使わないで、なんかしらの永続化フレームワークつかえ。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.