如果值为零,如何在准备好的语句中设置 null [重复]

Posted

技术标签:

【中文标题】如果值为零,如何在准备好的语句中设置 null [重复]【英文标题】:how to set null in prepared statement if the value is zero [duplicate] 【发布时间】:2016-03-21 16:45:42 【问题描述】:
preparedStatement.setInt(1, pimDataVo.getItemFlashMessageId());
preparedStatement.setInt(2, pimDataVo.getErpImprintCodeId());
preparedStatement.setInt(3, pimDataVo.getPublisherCodeId());
preparedStatement.setInt(4, pimDataVo.getGlClassId());

如果获取值为零,有什么方法可以将这些值设置为空。??都是数字列

【问题讨论】:

是的,有办法。你是如何尝试实现这个逻辑的?你在实现这个逻辑时遇到了什么问题? 【参考方案1】:

是的,您需要使用setNull 方法。因此,在您的情况下,它将是:

if (pimDataVo.getItemFlashMessageId() != 0) 
    preparedStatement.setInt(1, pimDataVo.getItemFlashMessageId());
 else 
    // use setNull
    preparedStatement.setNull(1, java.sql.Types.INTEGER);

您对其他值使用类似的方法。如果为您,您也可以编写一个 HELPER CLASS 来执行此操作(这样您就不会重复很多代码)。像这样的:

public static void setIntOrNull(PreparedStatement pstmt, int column, int value)

    if (value != 0) 
        pstmt.setInt(column, value);
     else 
        pstmt.setNull(column, java.sql.Types.INTEGER);
    

然后你像这样使用你的代码:

Helper.setIntOrNull(preparedStatement, 1, pimDataVo.getItemFlashMessageId());
Helper.setIntOrNull(preparedStatement, 2, pimDataVo.getErpImprintCodeId());
Helper.setIntOrNull(preparedStatement, 3, pimDataVo.getPublisherCodeId());
Helper.setIntOrNull(preparedStatement, 4, pimDataVo.getGlClassId());

【讨论】:

我没有使用上述逻辑,而是将数据类型从 int 更改为 Integer,如果值为空,则设置为 null。 请注意,如果pimDataVo-Object 在检查和集合之间发生变化,则第一个示例代码包含一个并发错误。请仅在您可以断言没有其他线程可以访问底层对象时使用它! (否则使用局部变量) 我想知道,是否有某种preparedstatement 包装器可以为我们做到这一点?

以上是关于如果值为零,如何在准备好的语句中设置 null [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JDBC PreparedStatement 中设置公式

如果我总是在准备好的语句中使用 varchar 设置 null 会发生啥?

在准备好的语句中不向列 X 插入值的逻辑 [重复]

UPDATE语句pyodbc在sql server中设置NULL值(而不是None)

使用 PHP 和 MSSQL 准备好的语句

创建 MySQL 准备好的语句