Обновление SQL с переменной для уравнения - PullRequest
3 голосов
/ 12 января 2012

Я хотел бы спросить, как упростить следующее подготовленное утверждение , чтобы оно использовало только 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 

Очевидно, что вы не можете поместить его в это подготовленное утверждение, поскольку это фактически два утверждения.

Интересно, есть ли способ присвоения локальной переменной в этом виде SQL Update при первой оценке 'sytosc +?'?

Я был бы очень признателен за решение, совместимое с MySQL, так как именно это я использую в этом проекте.

Ответы [ 2 ]

2 голосов
/ 12 января 2012
UPDATE zawodnicy SET sytosc = LEAST( 100, sytosc + ? )
WHERE id = ?
2 голосов
/ 12 января 2012

Вы можете использовать NamedParameterJdbcTemplate Spring и использовать запрос, подобный следующему:

UPDATE zawodnicy SET sytosc = 
CASE WHEN (sytosc + :offset > 100) 
     THEN 100 
     ELSE sytosc + :offset 
END 
WHERE id = :id

См. http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/jdbc.html для документации поддержки Spring's JDBC, которая имеетдругие преимущества.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...