実装的に当たり前といえば当たり前だけれど、知らないとハマりそうな話。
[java.sql.ResultSet]の[ResultSet.getLong()]や[ResultSet.getInt()]は、primitiveな値を返却するように実装されている。
なのでDB上でNULL許可されているようなカラムから情報を取得する場合、もしNULLを期待するような処理を書こうと思っても0Lや0などのprimitiveの初期値になってしまう。
なので、NULLを期待したい場合には以下のように考慮してプログラムを書く必要がある。
例: Demo.java
import java.sql.ResultSet;
import java.sql.SQLException;
public class Demo {
public static void main(String... args) throws SQLException {
ResultSet resultSet = null;
// ---------------------------
// ここにResultSetを取得する何らかの処理
// ---------------------------
Long value = resultSet.getObject("column") != null ? resultSet.getLong("column") : null;
System.out.println("value = " + value);
}
}
[java.util.Optional]等でもうちょっと綺麗にかければ良いのだが[ResultSet.getObject()]や[ResultSet.getLong()]は[java.sql.SQLException]がthrowsに指定されているので書きにくい。
あんまり多い様なら、Utilを作ってそこでやった方が良さそう。