Java 如何在带有CASE语句的SQL中使用PreparedStatement

Java 如何在带有CASE语句的SQL中使用PreparedStatement,java,oracle,jdbc,case,prepared-statement,Java,Oracle,Jdbc,Case,Prepared Statement,我必须使用case语句更新列,但是如何在case语句上设置PreparedStatement参数。我的代码如下所示: PreparedStatement updateAkaunAmanahPs = con.prepareStatement("" + "UPDATE GL_AKAUN_AMANAH " + " SET AMAUN_YOBCR = (CASE WHEN

我必须使用
case
语句更新列,但是如何在
case
语句上设置
PreparedStatement
参数。我的代码如下所示:

PreparedStatement updateAkaunAmanahPs = con.prepareStatement(""
                                + "UPDATE GL_AKAUN_AMANAH "
                                + "   SET AMAUN_YOBCR = (CASE WHEN AMAUN_YOBCR IS NOT NULL THEN AMAUN_YOBCR = AMAUN_YOBCR + ? ELSE ? END) "
                                + " WHERE PKID = ?");

updateAkaunAmanahPs.setBigDecimal(1, ytddr.subtract(ytdcr));

// if the case statement is true, how about this parameter ?
updateAkaunAmanahPs.setBigDecimal(2, ytddr.subtract(ytdcr)); 

updateAkaunAmanahPs.setLong(3, 30);

有什么想法吗?

你只需要考虑占位符(
)的数量,在你的情况下,你有3个占位符,然后你需要相应地设置它们(,顺序相同

updateAkaunAmanahPs.setBigDecimal(1, ytddr.subtract(ytdcr)); // for first placeholder
updateAkaunAmanahPs.setBigDecimal(2, ytddr.subtract(ytdcr)); // for second
updateAkaunAmanahPs.setLong(3, 30); // for third