如果值为零,如何在准备好的语句中设置 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 会发生啥?