我想知道是否有办法将ArrayList(或任何类型的List)绑定到PreparedStatement,最终将用于访问Oracle数据库.我发现:
PreparedStatement IN子句替代?
这看起来与我的问题类似,但这个问题更具体:我想将一个ArrayList绑定到要在Oracle中使用的PreparedStatement,如果可能的话,这是如何实现的?
您不能将List绑定到预准备语句中的单个参数.
使用列表中每个元素的参数标记生成SQL,例如:
SELECT NAME FROM ITEM WHERE ID IN (?, ?, ?, ?)
即使您将为每个查询生成一个新语句,我仍然建议您使用PreparedStatement
.如果您的列表包含String
实例,您将获得必要的转义以防止SQL注入.
但即使它是安全类型,如Integer
对象,某些驱动程序或中间件也可以缓存PreparedStatements
,如果请求相同的表单则返回缓存的实例.当然,有些测试是必要的.如果您的列表大小差异很大,那么您将拥有许多不同的语句,并且可能无法处理执行效果不佳的缓存.