MySql jdbc:
resultSet.getInt(index)
返回0表示NULL,因为它的返回类型是int,而不是java.lang.Integer。但
resultSet.getObject(index, java.lang.Long)
返回0表示null。它应该返回NULL。对?检查列类型 结果集,列类型是java.lang.Long。它应返回null,但返回0表示null。
检查Oracle 11g:它按预期返回null。
答案 0 :(得分:3)
来自JDBC 4.3规范:
当数据库中的列值为SQL
NULL
时,它可能是 作为null
,0
或false
返回Java应用程序,具体取决于 关于列值的类型。映射到Java的列值Object
类型作为Javanull
返回;映射到的那些 数字类型返回为0
;映射到Javaboolean
的那些 以false
返回。因此,可能需要打电话给wasNull
方法确定检索的最后一个值是否为 SQLNULL
。
不幸的是,措辞含糊不清,可以解释为getObject
0
如果是{数字类型}可能会返回NULL
,但这不是意图。
JDBC 1.20规范对此更为清晰:
当您使用ResultSet.getXXX方法之一读取SQL“NULL”时, 你会收到:
- 返回Java对象的getXXX方法的Java“null”值。
- getByte,getShort,getInt,getLong,getFloat和getDouble的零值
- getBoolean的错误值。
换句话说,对于getObject
值的整数列,null
应返回NULL
。
getObject(int/String)
的文档进一步支持了这一点(也适用于getObject(int/String, Class)
:
如果值是SQL
NULL
,则驱动程序返回Javanull
。