【问题标题】:ResultSet.getFloat return 0 instead of NULLResultSet.getFloat 返回 0 而不是 NULL
【发布时间】:2016-02-08 04:43:36
【问题描述】:

我正在使用 JDBC ResultSet 从数据库中获取记录。但是

ResultSet.getFloat() //returns 0 for NULL value. 

有没有办法使用getFloat() 或替代解决方案获得null 值?

【问题讨论】:

  • 也许您需要使用ResultSet#getObject 并将其类型转换为Float。无论如何,我建议您将数据检索为BigDecima 而不是FloatDouble

标签: java jdbc resultset


【解决方案1】:

有什么方法可以使用 getFloat() 获取 NULL 值;或任何其他替代解决方案。

是的。您可以调用ResultSet.wasNull(),它会报告最后一列读取的值是否为SQL NULL。请注意,您必须首先在列上调用其中一个 getter 方法以尝试读取其值,然后调用方法 wasNull 以查看读取的值是否为 SQL NULL

【讨论】:

  • @Cool 然后在之后调用wasNull()(它会告诉你这是否真的为空)。
  • ResultSet.GetFloat() - 返回 - 0 if(ResultSet.wasNull()) 此条件为假,因为返回值为 0。因此不确定是否 wasNull 方法检查返回的值或实际在数据库中的值。
  • @Cool 不应该,JDBC 规范要求驱动程序返回 true 如果最后读取的值是 null(你可能意识到像 float 这样的原语永远不可能是 null ,这也是getFloat的API文档说“返回:列值;如果值为SQLNULL,则返回值为0)的原因。如果wasNull() 没有返回true,那么要么该列不为空,要么您使用的驱动程序存在错误。
【解决方案2】:

您需要调用ResultSet.wasNull() 来测试最后读取的列是否具有SQL NULL 值。

【讨论】:

    【解决方案3】:

    对此有不同的看法:

    ResultSet.getString("columnName") 
    

    将返回 null 或列中的值。如果getString 的返回值不为空,则可以将值转换为浮点数。

    【讨论】:

      猜你喜欢
      • 2010-11-05
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多