我想获取用户输入,然后从表amount column
中的BOX
中的一行中减去它。正如您在下面的代码示例中所看到的,我已使用scanner class
对其进行了编程,因此如果用户键入数字2,它将从RED_BOX_LARGE
列中的amount
行中减去2在BOX
表中。问题是,我要添加300多行,而且我不能真正做到这种if-statement
300次,必须有另一种方式,是不是有办法将它编程为仅从中减去用户输入的行数,但尚未指定数字。我正在使用Java和PostgreSQL。
if(userinput.equals("2")){
String one = "UPDATE BOX SET AMOUNT =
(SELECT AMOUNT FROM BOX WHERE NAME = 'RED_BOX_LARGE') -2 WHERE NAME='RED_BOX_LARGE';";
stmt.executeUpdate(one);
}
这是表格。
name | price | form_factor | amount
-----------------+---------+-------------+--------
RED_BOX_SMALL | 17.1125 | RED_SMALL | 10
BLUE_BOX_LARGE | 1586.5 | BLUE_LARGE | 10
BLUE_BOX_SMALL | 1324.5 | BLUE_SMALL | 10
GREEN_BOX_LARGE | 1175.25 | GREEN_LARGE | 10
GREEN_BOX_SMALL | 930.5 | GREEN_SMALL | 10
GRAY_BOX_LARGE | 735.25 | GRAY_LARGE | 10
GRAY_BOX_SMALL | 450.5 | GRAY_SMALL | 10
RED_BOX_LARGE | 2120.75 | RED_LARGE | 3
(8 rows)
答案 0 :(得分:0)
通常,不建议将sql查询字符串拆分为多个部分,因为过度使用它可能容易出错,但对于单独的情况,它可能是可以接受的。
因此,您可以将查询字符串拆分为两部分。
String one = "UPDATE BOX SET AMOUNT =
(SELECT AMOUNT FROM BOX WHERE NAME =
'RED_BOX_LARGE') - "
和
String two = " WHERE NAME='RED_BOX_LARGE';";
通过在它们之间添加用户输入来连接它们。
String query = one + userinput + two;
stmt.executeUpdate(query);
您还可以在单个查询字符串中模板化用户输入,并使用
public static String format(String format, Object... args)
设置用户输入值。