如何将ArrayList绑定到Oracle中的PreparedStatement?

Met*_*002 5 java oracle jdbc arraylist prepared-statement

我想知道是否有办法将ArrayList(或任何类型的List)绑定到PreparedStatement,最终将用于访问Oracle数据库.我发现:

PreparedStatement IN子句替代?

这看起来与我的问题类似,但这个问题更具体:我想将一个ArrayList绑定到要在Oracle中使用的PreparedStatement,如果可能的话,这是如何实现的?

eri*_*son 5

您不能将List绑定到预准备语句中的单个参数.

使用列表中每个元素的参数标记生成SQL,例如:

SELECT NAME FROM ITEM WHERE ID IN (?, ?, ?, ?)
Run Code Online (Sandbox Code Playgroud)

即使您将为每个查询生成一个新语句,我仍然建议您使用PreparedStatement.如果您的列表包含String实例,您将获得必要的转义以防止SQL注入.

但即使它是安全类型,如Integer对象,某些驱动程序或中间件也可以缓存PreparedStatements,如果请求相同的表单则返回缓存的实例.当然,有些测试是必要的.如果您的列表大小差异很大,那么您将拥有许多不同的语句,并且可能无法处理执行效果不佳的缓存.