【问题标题】:java sql update statement with user input带有用户输入的java sql更新语句
【发布时间】:2018-01-09 18:39:50
【问题描述】:

我在从 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 User id,它在这个方法中作为参数给出,而不是我的数据库表中不存在的列。

【问题讨论】:

  • 您使用的是 JDBC 吗?你怎么不知道你的数据库中有什么列......做一个'desc product;'在您的数据库环境中
  • 您需要对输入的值进行转义。

标签: java mysql syntax


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    虽然您在生产代码中肯定希望使用准备好的语句来防止 sql 注入,但下面是一个简单的解决方法。

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

    字符串本身不会计算变量。

    【讨论】:

      【解决方案3】:

      如果您的数据库中不存在 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;"
      

      【讨论】:

        【解决方案4】:
        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");
                    }
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-29
          相关资源
          最近更新 更多