带有用户输入的java sql update语句

时间:2018-01-09 18:39:51

标签: java mysql syntax

我在从java更新表时遇到问题。

我需要检查colmunID(来自我的表PRODUCTS)= int id(由用户输入给出)并将表中的产品价格更改为用户给出的价格。

问题:

 static void x(int Userid, int Userprice) {
 ..........................................
   String sql = "UPDATE  Product set Price = Userprice where ID=Userid; ";
....}  

我收到的错误是我的数据库中没有Userprice或Userid列。我不知道怎么写这个来检查int这个方法中作为参数给出的用户ID而不是我的数据库表中不存在的列。

4 个答案:

答案 0 :(得分:1)

假设您在DB中同时拥有Integer数据类型的列,

String sql = "UPDATE  Product set Price="+Userprice+" where ID="+Userid;

您没有将实际值传递给它和额外的';'不需要。另外,我建议你更喜欢准备好的陈述,而不是上面的方法

答案 1 :(得分:1)

虽然你肯定在生产代码中想要使用预处理语句来阻止sql注入,但下面会有一个简单的解决方法。

String sql = String.format("UPDATE  Product set Price = %d where ID=%d ",Userprice,Userid);

String不会自己评估变量。

答案 2 :(得分:0)

如果数据库中不存在Userid表,则无法在SQL查询中使用此表。有两种选择: 1.将Userid和Userprice作为变量传递给SQL查询

    String sql = "UPDATE  Product set Price = " + Userprice + "where ID=" + Userid+ "; "

或者 2.在数据库中创建表并加入

    String sql = "Update A Set A.Price = b.Userprice FROM Product as A INNER JOIN User as b on A.Userid = b.ID;"

答案 3 :(得分:0)

PreparedStatement ps = null;
Connection con = null;
try {
con = getConnection();
String sql = "UPDATE  Product set Price = ? where ID= ? ";          
            ps = con.prepareStatement(sql);         
            ps.setString(1, Userprice); 
            ps.setString(2, Userid); 
            int i = ps.executeUpdate();
            if (i > 0) { 
                System.out.println("Product Updated"); 
            } else {
                System.out.println("Error Occured");
            }

我认为这是您正在寻找的东西......查询不应包含';'在代码的字符串中