Java中是否存在通用方式判断ResultSet中的NULL值?
Java中判断java.sql.ResultSet中NULL值的通用方法
你给出的getObject()搭配wasNull()的实现方案是符合JDBC规范的正确写法,同时你猜测的rs.getObject(...)支持所有类型列的结论也是完全成立的。
核心结论说明
- JDBC规范强制要求所有数据库驱动实现的
getObject()方法必须支持所有SQL列类型的读取,不会出现类似对字符串列调用getBigDecimal()时的类型不匹配异常:列值非空时,方法会返回对应SQL类型映射的标准Java类型对象;列值为SQL NULL时,规范要求方法返回Javanull。 - 不建议直接通过
rs.getObject("列名") == null判断NULL值:部分老旧驱动、特殊数据库类型(比如部分Oracle自定义类型、旧版本的时间类型)的实现中,空值读取后可能不会返回Java null,因此紧跟列读取操作后调用wasNull()判断是兼容性最好的方案。
标准实现代码
ResultSet rs; // 已完成初始化的ResultSet对象 Object theValue; boolean isValueNull; theValue = rs.getObject("MY_COLUMN"); // 注意:wasNull()判断的是最近一次列读取操作的结果是否为SQL NULL // 调用前不要穿插其他列的读取逻辑,否则判断结果会失效 isValueNull = rs.wasNull();
补充说明
如果你的项目使用JDBC 4.2及以上版本的驱动、运行环境为Java 8+,也可以使用带类型参数的getObject重载方法,该方法遇到SQL NULL时会直接返回Java null,无需额外调用wasNull(),但使用前需要确认生产环境的驱动版本支持该特性,避免出现兼容性问题。
内容的提问来源于stack exchange,提问作者zhoudu
相关产品推荐
相关产品推荐

