我有一个sqlQuery:

select * from products where product_type in :prodTypes
query.setParameter("prodTypes",getInClauseFromList(productTypes));

productTypes是一个List<String>
public String getInClauseFromList(List list) {
    if(list != null && !list.isEmpty()) {
      String inClause = Arrays.toString(list.toArray());
      inClause = inClause.replace("[", "('").replace("]", "')");
      inClause = inClause.replace(", ", "','");
      return inClause;
    }
    return "('')";
  }

我得到一个错误:
Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your
SQL syntax; check the manual that corresponds to your MySQL server version for the right
syntax to use near ''(\'clothes\')')

最佳答案

我建议使用类似Spring的JDBCTemplate。然后就不必手动将列表转换为字符串。
在上面的示例中,您传入的字符串被引用(应该是这样),因此生成的SQL不正确。
鉴于我不知道“query”是哪种类型:请尝试将列表直接设置为参数。大多数框架都应该支持为IN子句正确转换它。

关于java - 执行包含in子句的sqlQuery时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31696739/

10-11 08:40