在Java中使用MySQL的IN语句

时间:2010-08-24 09:51:21

标签: java mysql arrays

我必须找出表中是否存在我在Java中的列表中存在的条目。逻辑解决方案是“SELECT列FROM表WHERE列IN(?)”然后设置?到我在Java中的数组,但setArray要求java.sql.Array,我不确定如何获得一个,如果它真的是我正在寻找的。

3 个答案:

答案 0 :(得分:3)

不,那是不可能的。

不幸的是,IN需要两个步骤:

  1. 为每个值添加一个绑定?
  2. 循环显示值并将其绑定到?
  3. 没有简单的方法可以做到。

答案 1 :(得分:1)

您无法使用JDBC执行此操作,但如果使用spring或hibernate,则两者都支持重写查询以将参数列表展开到正确的数量?。

Query query = session.createQuery("select x from y where z in (:params)");
query.setParameterList("params", paramList);
List list = query.list();

在Spring中,您需要使用NamedParameterJdbcTemplate。

答案 2 :(得分:0)

假设参数全部由程序逻辑生成,即没有SQL注入的风险,那么我认为可以采用良好的旧字符串操作...

String status = "'Pending','Approved'";
String sql  = "SELECT * FROM table ";
       sql += "WHERE status IN (" + status + ")";
ps = conn.prepareStatement(sql);

如果参数以任何方式由用户输入生成,则可以打开SQL注入。但是,如果您控制应用程序代码中的参数,我认为它没有问题。

如果从数组传递,请确保在构建参数字符串时用引号包装每个参数。

最简单的解决方案通常更好。