【问题标题】:Oracle ResultSet.getString("colname") returning the string "null" instead of java nullOracle ResultSet.getString("colname") 返回字符串“null”而不是 java null
【发布时间】:2013-05-29 15:55:59
【问题描述】:

编辑:对 addrline2 (addrline2 == null) 的后续检查显示 addrline2 实际上为 null,打印出 null 对象导致字符串“null”进入标准输出。

我正在使用带有 Oracle 11g 数据库的 Oracle 11g 瘦客户端。查询包含 null 的列时,getString("colname") 返回字符串“null”而不是 Java 空值。这是预期的行为吗? Javadoc 表明我应该收到一个 Java 空值。

    ResultSet rs = descStatement.executeQuery();

    rs.next();
    String addrline2 = rs.getString("addressLine2");
    System.out.println("addrLine2->"+addrline2+"<-");

    boolean wasNull = rs.wasNull();
    System.out.println("Wasnull: "+wasNull);

输出:

addrLine2->null<-
Wasnull: true

【问题讨论】:

  • 您确定列中的值不是“null”吗?你有任何类型的数据库浏览器,所以你可以确定吗?
  • 是的,试试+(addrline2 == null)+。 String + 调用 String.valueOf(...)

标签: java oracle jdbc


【解决方案1】:

请注意,当转换为字符串时,null 对象会打印为“null”。您实际上并没有在任何地方检查是否为空。

尝试添加

if (addrline2 == null) {
    System.out.println("It's null!")
}

【讨论】:

  • 你是对的。我正在返回一个 Java 空值。谢谢。 (我使用的是 spring 的 BeanPropertyRowMapper,它为字符串“null”设置了一个 String 属性,所以当我看到 null 打印输出时,我以为我从驱动程序获取了“null”,而不是它的 toString() Java 空对象。谢谢。
【解决方案2】:

rs.getString("addressLine2") 只返回 null 但当你这样做时

System.out.println("addrLine2->"+addrline2+"<-");

将 null 打印为字符串文字

这样做

  System.out.println("addrLine2->"+addrline2!=null ? addrline2 : "Its null"+"<-");

【讨论】:

    猜你喜欢
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    相关资源
    最近更新 更多