代码之家  ›  专栏  ›  技术社区  ›  Uri

在JDBC中访问结果集时,有没有一种优雅的方法来区分空值和实际零值?

  •  5
  • Uri  · 技术社区  · 16 年前

    当使用JDBC并通过结果集访问基元类型时,是否有比以下更优雅的方法来处理null/0:

    int myInt = rs.getInt(columnNumber)
    if(rs.wasNull())?
    {
     // Treat as null
    } else
    {
     // Treat as 0
    }
    

    每当我看到这种代码,我个人都会畏缩。我不明白为什么ResultSet没有被定义为返回装箱整数类型(除了性能),或者至少两者都提供。如果有人能让我相信当前的API设计非常棒,我会给你加分:)

    我要澄清的是,这段代码让我困扰的不是长度,而是它在后续调用之间创建了一个状态依赖关系,而看似简单的getter实际上在同一行中有副作用。

    1 回复  |  直到 16 年前
        1
  •  8
  •   skaffman    16 年前

    jdbcapi是为提高性能而设计的。请记住,它可以追溯到Java1.1,当时对象的大量转换是JVM杀手(直到Java1.2+中的热点JVM出现,才可以放宽这种限制)。使用装箱类型会破坏当时高容量应用程序的性能。

    如果您想避免您提到的代码类型,您可以始终使用 getObject() 而不是 getInt() java.lang.Number Integer 或 BigInteger ,具体取决于特定的SQL类型。

    推荐文章