执行包含in子句的sqlQuery时出错

时间:2015-07-29 09:42:07

标签: java mysql

我有一个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\')')

1 个答案:

答案 0 :(得分:1)

我建议使用Spring的JDBCTemplate之类的东西。然后,您不必手动将列表转换为字符串。

在上面的示例中,您传入的String是引用的(因为它应该是),因此生成的SQL不正确。

鉴于我不知道哪种类型&#34;查询&#34;是:尝试直接将列表设置为参数。大多数框架都应支持为IN子句正确转换它。