jdbc模板failsafe IN语句

时间:2015-09-17 13:38:34

标签: java spring jdbctemplate

有没有办法使用Spring的jdbc模板来获取多行? 这篇文章中的内容: https://stackoverflow.com/a/1327222/1321514

Model.observes('before save', hookFn)

但无论DB对参数数量的限制如何,都能够返回所有ID。因此,如果DB只能接受IN子句中的2000个参数,并且我通过了2001,那么我将获得2001年的记录。

3 个答案:

答案 0 :(得分:2)

您可以在临时表的帮助下执行此操作,其中首先需要创建它然后将所有值IN转储到其上。稍后,您需要在连接或子查询中使用该表,以便与最初需要IN caluse的主表相关联。完整的JDBCTemplate代码可以在http://forum.spring.io/forum/spring-projects/data/63634-spring-jdbc-and-sybase-temp-tables

找到

答案 1 :(得分:0)

您可以通过将参数列表分解为大约100或更多的较小批次来实现。我记得我写了一个类似的代码,我根据批量计数创建动态选择查询并传递总参数的子集。例如,在2001年记录的情况下,我的函数将创建21个查询,例如SELECT * FROM <table> WHERE <column> IN (?,..<batchSize>..,?)

答案 2 :(得分:0)

我是(相当激进的)参数的用户(在查询中),但在&#34;&#34;中的一系列int&#34;我将其连接为字符串(在Java中使用StringBuilder),因此最终查询字符串为:

"SELECT * FROM foo WHERE a IN (215, 567, 957, 1298)"

要明确:IN基于枚举,而不是与奴隶表的关系,这是不同的故事

查询字符串长度的限制非常大(在数据库中有所不同?可能是的)