我使用像
这样的查询"UPDATE MAILSCH.MESSAGE "
+ "SET IDFOLDER=?, SUBJECT=?, CONTENT=?, CREATIONTIME=?, AD_FROM=?, AD_TO=?, STATUS=? "
+ "WHERE IDMESSAGE=?";
我可以在不更改查询的情况下错过IDFOLDER吗?
答案 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