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

时间:2010-05-25 09:49:36

标签: java prepared-statement

我使用像

这样的查询
"UPDATE MAILSCH.MESSAGE "
            + "SET IDFOLDER=?, SUBJECT=?, CONTENT=?, CREATIONTIME=?, AD_FROM=?, AD_TO=?, STATUS=? "
            + "WHERE IDMESSAGE=?";

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

4 个答案:

答案 0 :(得分:4)

不,你不能。您需要在需要时有条件地将SQL的那部分插入SQL字符串中。

答案 1 :(得分:4)

不,您必须编写第二个不包含IDFOLDER列的查询。所有参数都必须绑定。

答案 2 :(得分:3)

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

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

SET IDFOLDER=CASE ISNULL(?) WHEN 0 THEN IDFOLDER ELSE IDFOLDER END

如果您的JDBC驱动程序支持命名参数,那么可能会为您提供更清晰的选择。

答案 3 :(得分:0)

javadoc没有明确表示你不能,但是当我尝试它时,我得到了这样的例外:

java.sql.SQLException: Parameter not set