如果值为零,如何在预处理语句中设置为空。

7
preparedStatement.setInt(1, pimDataVo.getItemFlashMessageId());
preparedStatement.setInt(2, pimDataVo.getErpImprintCodeId());
preparedStatement.setInt(3, pimDataVo.getPublisherCodeId());
preparedStatement.setInt(4, pimDataVo.getGlClassId());

如果获取的值为零,有没有办法将这些值设置为空??所有列都是数字列


1
是的,有方法。你尝试过如何实现这个逻辑吗?在实现这个逻辑时遇到了什么问题? - rgettman
1个回答

13

是的,您需要使用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,而不是使用上述逻辑。 - Gopinath
请注意,如果pimDataVo对象在检查和设置之间发生更改,则第一个示例代码包含并发错误。请仅在您可以断言没有其他线程可以访问基础对象时使用它!(否则请使用本地变量) - Qw3ry
我在想,是否有一种preparedstatement包装器可以为我们完成这个任务? - Tamas Rev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接