getObject(index,Long)为null返回0

时间:2018-03-23 20:42:27

标签: java mysql jdbc

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。

1 个答案:

答案 0 :(得分:3)

来自JDBC 4.3规范:

  

当数据库中的列值为SQL NULL时,它可能是   作为null0false返回Java应用程序,具体取决于   关于列值的类型。映射到Java的列值   Object类型作为Java null返回;映射到的那些   数字类型返回为0;映射到Java boolean的那些   以false返回。因此,可能需要打电话给   wasNull方法确定检索的最后一个值是否为   SQL NULL

不幸的是,措辞含糊不清,可以解释为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,则驱动程序返回Java null