带有变量的SQL Update

时间:2012-01-12 12:10:31

标签: java mysql sql prepared-statement

我想问一下如何简化以下准备好的陈述,所以它只使用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兼容的解决方案,因为我正在使用这个项目。

2 个答案:

答案 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 = ?