我想问一下如何简化以下准备好的陈述,所以它只使用2而不是3个问号(?),每个'sytosc +?'我设置了相同的值。
PreparedStatement psUp = conn.prepareStatement("UPDATE zawodnicy "
+ "SET sytosc = CASE WHEN (sytosc + ? > 100) THEN 100 ELSE sytosc + ? END "
+ "WHERE id=?");
我在SQL中知道你可以这样做:
SET @a = 25;
UPDATE zawodnicy SET sytosc = CASE WHEN (sytosc + @a > 100)
THEN 100 ELSE sytosc + @a END WHERE id = 1
显然你不能把它放在这个准备好的陈述中,因为这些有效地是两个陈述。
我想知道在第一次评估'sytosc +?'时是否真的有办法在这种SQL Update中分配局部变量?
我非常感谢与MySQL兼容的解决方案,因为我正在使用这个项目。
答案 0 :(得分:2)
您可以使用Spring NamedParameterJdbcTemplate,并使用如下查询:
UPDATE zawodnicy SET sytosc =
CASE WHEN (sytosc + :offset > 100)
THEN 100
ELSE sytosc + :offset
END
WHERE id = :id
有关Spring的JDBC支持的文档,请参阅http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/jdbc.html,这有其他优点。
答案 1 :(得分:2)
UPDATE zawodnicy SET sytosc = LEAST( 100, sytosc + ? )
WHERE id = ?