PostgreSQL用户输入在Java中减去

时间:2017-03-26 21:44:56

标签: java postgresql

我想获取用户输入,然后从表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)

1 个答案:

答案 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)设置用户输入值。