java - SQL更新方程变量

标签 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 更新中分配局部变量?

我非常感谢与 MySQL 兼容的解决方案,因为这是我在这个项目中使用的解决方案。

最佳答案

UPDATE zawodnicy SET sytosc = LEAST( 100, sytosc + ? )
WHERE id = ?

关于java - SQL更新方程变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8834856/

相关文章:

mysql - 替换存储在数据库中的标签,保持它们之间的字符串

使用 WAMP 在浏览器中显示为注释的 PHP 代码

用于读取中间记录的 SQL

java - 子类可以使用相同的方法,但具有不同的变量类型吗?如何? (Java)

java - 即时创建实例在 Java 中称为什么?

sql - digitalocean vps 上的 MYSQL 导入语法错误 1064

mysql - SQL查询以获取以ios应用程序的某些特定行开头的表中的数据

java - 单元测试仅在使用 Ant 任务运行时失败

Java KeyListener 监听方向键,不带 "Windows key"

java - 无法使用 getImportedKeys() 或 getExportedKeys() 获取外键,只有 getPrimaryKeys() 有效