Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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を直接使わないで、なんかしらの永続化フレームワークつかえ。

momosetkn
JVM系言語など、静的型付け言語が好き。低レイヤーのパフォーマンスについて興味があります。 Java/Scala/Python/TypeScript
qiitadon
Qiitadon(β)から生まれた Qiita ユーザー・コミュニティです。
https://qiitadon.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away