准备好的声明.我可以错过参数吗?

And*_*i N 6 java prepared-statement

我使用像这样的查询

"UPDATE MAILSCH.MESSAGE "
            + "SET IDFOLDER=?, SUBJECT=?, CONTENT=?, CREATIONTIME=?, AD_FROM=?, AD_TO=?, STATUS=? "
            + "WHERE IDMESSAGE=?";
Run Code Online (Sandbox Code Playgroud)

我可以在不更改查询的情况下错过IDFOLDER吗?

mdm*_*dma 3

不幸的是没有。位置参数(“?”)正是如此,通过它们在查询中的位置或出现顺序来标识。如果删除“IDFOLDER=?”,则将为查询的其余部分分配错误的参数,并且可能会出现异常,因为分配的参数数量与查询中预期的数量不匹配。

我假设您无法更改源代码,因为这是最简单的途径 - 更改 SQL,然后更改 JDBC 参数以匹配。如果需要使用相同数量的参数,则可以以不更改 IDFOLDER 值但使用第一个参数的方式编写查询。

SET IDFOLDER=CASE ISNULL(?) WHEN 0 THEN IDFOLDER ELSE IDFOLDER END
Run Code Online (Sandbox Code Playgroud)

如果您的 JDBC 驱动程序支持命名参数,这可能会为您提供更简洁的替代方案。