【问题标题】:Unknown column error in where clause, using MySQL and Javawhere 子句中的未知列错误,使用 MySQL 和 Java
【发布时间】:2014-07-31 12:32:02
【问题描述】:

以下是我的代码行:

ResultSet rs3 = stmt6.executeQuery("SELECT * FROM ShopSystem.Order where s_id="+s_id+" AND status="+Pending);

我收到以下错误:

Unknown column 'Pending' in 'where clause'

可能是什么原因...我无法通过它..

【问题讨论】:

    标签: java mysql sql connection database-connection


    【解决方案1】:

    毫无疑问,status 是一个字符串,所以需要与字符串进行比较。使用分隔符:

    SELECT * FROM ShopSystem.Order where s_id="+s_id+" AND status='"+Pending+"'"
    

    或者更好的是,学习如何编写使用参数替换将参数值放入 SQL 字符串的代码。

    【讨论】:

      【解决方案2】:

      改成

      AND status = '" + Pending + "'"
      

      您需要将字符串放在引号中。否则数据库会认为你的意思是列名。

      但实际上你应该使用Prepared Statements。然后你不需要像这样将查询修补在一起,你也不用担心参数和转义它们......

      【讨论】:

        【解决方案3】:

        不要串联!使用准备好的语句

        PreparedStatement stm = conn.prepareStatement("SELECT * FROM ShopSystem.Order where s_id = ? AND status = ?");
        stm.setInt(1, s_id);
        stm.setString(2, Pending.name());
        ResultSet rs = stm.executeQuery();
        

        【讨论】:

          【解决方案4】:

          在这种情况下你必须使用 PreparedStatement

          // use the ? for the 2 entries values
              String selectSQL = new String("SELECT * FROM ShopSystem.Order where s_id=? AND status=?")
              preparedStatement = dbConnection.prepareStatement(selectSQL);
          // in order you must incialise them here                
                           preparedStatement.setString(1, "s_id");
                          preparedStatement.setString(2, "Pending");
          //execute your resultset    `enter code here`
          ResultSet rs = preparedStatement.executeQuery();
          

          【讨论】:

            猜你喜欢
            • 2012-04-25
            • 1970-01-01
            • 2011-03-22
            • 1970-01-01
            • 1970-01-01
            • 2021-09-19
            • 2018-04-01
            • 1970-01-01
            • 2020-06-28
            相关资源
            最近更新 更多