如何在 JDBCTemplates 中使用 SELECT IN 子句?

新手上路,请多包涵

这是我第一次使用 JDBCTemplates,我遇到了一个需要使用如下查询的情况:

 SELECT * FROM table WHERE field IN (?)

我怎么做?我已经尝试传递一个列表/数组值,但没有成功,我得到一个异常。我当前的代码如下所示:

 Long id = getJdbcTemplate().queryForLong(query, new Object[]{fieldIds});

Spring 文档 指出,除了生成所需数量的“?”之外,没有其他方法可以做到这一点。占位符以匹配参数列表的大小。有解决方法吗?

原文由 Chepech 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 580
2 个回答

我认为您不能将其作为单个“?”来执行。它与 Spring JDBC 模板无关,它是核心 SQL。

您必须根据需要为其中的任意多个构建一个 (?, ?, ?) 。

原文由 bmargulies 发布,翻译遵循 CC BY-SA 2.5 许可协议

有一种使用 NamedParameterJdbcTemplate 而不是 SimpleJdbcDaoSupport 的解决方法,您可以在其中执行如下操作:

 List integerList = Arrays.asList(new Integer[] {1, 2, 3});
Map<String,Object> params = Collections.singletonMap("fields", integerList);
Long id = namedParameterJdbcTemplate.queryForLong("SELECT * FROM table WHERE field IN (:fields)", params);

但是,这对于您可以在列表中传递的参数数量有潜在的灾难性限制,具体取决于您使用的数据库。

原文由 Chepech 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题