Java PreparedStatement如何将int数组作为IN参数设置

3
可能是重复问题:
PreparedStatement IN子句的替代方法?
SELECT * FROM tableName WHERE id IN ?

我希望设置PreparedStatement的IN参数为一个int[]。例如,整数数组{1,2,3,4}将在查询中变为IN (1,2,3,4)
是否有一个简单的方法可以使用PreparedStatement的方法实现这个功能?还是必须通过循环遍历数组动态创建IN参数作为字符串?
我想要类似于#setString(int parameterIndex, String x)的东西,但当然是针对int数组的。

1
我认为它不是那样工作的。我认为你需要找到一种不同的语法,其中有多个问号,并设置每个问号的值。虽然想法很酷。 - Chris Gerken
你需要编写自己的方法,例如:http://stackoverflow.com/a/1916391/738746,可以重复使用。请注意,arguments不是一个`int`数组,而是一个`Object`数组。 - Bhesh Gurung
我正要建议你刚才提到的做法:通过循环数组动态构建查询。如果你想要更方便的方法,可以使用JPA 2(其中可以将集合分配给查询参数)。 - jahroy
不错的发现@BheshGurung。由于我的问题是重复的,所以我投票关闭它。(尽管如此,我不会删除它,因为我觉得我的问题标题更适合未来遇到相同问题的程序员进行搜索)。 - FThompson
那么,改变另一个问题的标题并删除这个问题怎么样? - reprogrammer
@reprogrammer 我考虑过这个问题,但其他问题适用于更广泛的情况。几个答案跳过了使用IN的方法,并采取了完全不同的方法来解决该问题。虽然那个答案适用于所有 IN 的替代方法,但我的答案只适用于设置 int[] 参数。 - FThompson
2个回答

1
我建议使用Spring JDBC。看看它有多容易开始使用:
    NamedParameterJdbcTemplate t = new NamedParameterJdbcTemplate(dataSource);
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("ids", Arrays.asList(1, 2));
    List<Map<String, Object>> list = t.queryForList("select * from t1 where id in (:ids)", params);

您会发现Spring JDBC的优点不仅在于它的内部机制。命名参数、无需创建/关闭连接、预处理语句、结果集、无需检查的异常、声明式事务支持以及许多其他功能。


非常有趣的方法。然而,这将需要我重写大部分应用程序以适应(我不知道这种方法是否为异步使用池连接),所以我不会选择这条路。 - FThompson

0
我所知道的唯一实现方法是在创建预处理语句之前修改查询字符串以添加新的问号,然后像平常一样执行绑定。

我将其标记为已接受,因为这确实是我选择采取的方法,但我不会点赞,因为它是在通过评论回答问题之后才出现的。无论如何,还是谢谢。 - FThompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接