【问题标题】:PreparedStatement setNull(..)PreparedStatement setNull(..)
【发布时间】:2010-11-24 08:28:16
【问题描述】:

Java PreparedStatement 提供了显式设置 Null 值的可能性。这种可能性是:

prepStmt.setNull(parameterIndex, Types.VARCHAR);

此调用的语义是否与使用带有 null 参数的特定 setType 时的语义相同?

prepStmt.setString(null);

?

【问题讨论】:

    标签: java jdbc prepared-statement


    【解决方案1】:

    但要小心这个....

    Long nullLong = null;
    
    preparedStatement.setLong( nullLong );
    

    -出现空指针异常-

    因为原型是

    setLong( long )   
    

    不是

    setLong( Long )
    

    很高兴能抓住你哦。

    【讨论】:

    • 这实际上是把我带到这里的例子。
    • 在这种情况下(在我的情况下使用 Postgres DB),您可以使用 setObject 方法。 Long nullLong = null; preparedStatement.setObject(nullLong);
    • @Owen : if(obj== null || obj == 0) {ps.setLong(INDEX_TWO, Types.BIGINT);} else {ps.setLong(INDEX_TWO, obj);} 工作对我来说
    【解决方案2】:

    这个guide 说:

    6.1.5 将 JDBC NULL 作为 IN 参数发送

    setNull 方法允许程序员将 JDBC NULL(通用 SQL NULL)值作为 IN 参数发送到数据库。但是请注意,仍然必须指定参数的 JDBC 类型。

    当将 Java 空值传递给 setXXX 方法(如果它将 Java 对象作为参数)时,JDBC NULL 也会发送到数据库。但是,只有在指定 JDBC 类型时,方法 setObject 才能采用空值。

    所以是的,它们是等价的。

    【讨论】:

    • +1:有趣。我认为这就是 setXXX 处理空值的方式,但我从未实际测试过它或阅读过它的文档。
    • 我不认为有类似 myPreparedStatement.setInteger(myIntegerObject) 的东西(尽管我看到确切的方法名称不存在)在我想要使用可能为空的整数的情况下?否则我将不得不使用 if/else 语句,以一种方式调用 .setInt() 并以另一种方式调用 .setNull(),这似乎有点乏味。
    • @ardave,是的,这就是我最后一段的意思
    • 我知道它很旧,但那个链接坏了。
    • 新链接:PreparedStatement
    【解决方案3】:

    最后我做了一个小测试,在编程时我想到了,如果没有 setNull(..) 方法,就无法为 Java 原语设置空值。两种方式的对象

    setNull(..)
    

    set<ClassName>(.., null)) 
    

    以同样的方式行事。

    【讨论】:

      【解决方案4】:

      您也可以考虑使用preparedStatement.setObject(index,value,type);

      【讨论】:

        【解决方案5】:
        preparedStatement.setNull(index, java.sql.Types.NULL);
        

        应该适用于任何类型。 虽然在某些情况下失败发生在服务器端,例如: 对于 SQL:

        COALESCE(?, CURRENT_TIMESTAMP)
        

        Oracle 18XE 因错误类型而失败:预期为DATE,得到STRING——这是一个完全有效的失败;

        底线:如果你打电话给.setNull(),知道类型是件好事

        更新:stackoverflow 需要雇佣更多的编辑来为我的帖子添加\删除标点符号

        【讨论】:

          猜你喜欢
          • 2013-04-10
          • 1970-01-01
          • 1970-01-01
          • 2013-07-06
          • 1970-01-01
          • 2010-11-04
          • 2012-10-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多