我想知道是否有一种方法可以将 ArrayList(或任何类型的列表)绑定(bind)到最终将用于访问 Oracle 数据库的 PreparedStatement。我发现:
PreparedStatement IN clause alternatives?
这似乎与我的问题相似,但这个问题更具体:我想将一个 ArrayList 绑定(bind)到一个 PreparedStatement 以便在 Oracle 中使用,如果可能的话,这是如何完成的?
最佳答案
您不能将列表绑定(bind)到准备好的语句中的单个参数。
为列表中的每个元素生成带有参数标记的SQL,例如:
SELECT NAME FROM ITEM WHERE ID IN (?, ?, ?, ?)
即使您将为每个查询生成一个新语句,我仍然建议使用 PreparedStatement
。如果您的列表包含 String
实例,您将获得必要的转义以防止 SQL 注入(inject)。
但即使它是安全类型,如 Integer
对象,一些驱动程序或中间件也可以缓存 PreparedStatements
,并在请求相同表单时返回缓存的实例。当然,一些测试是必要的。如果您的列表大小差异很大,您将有许多不同的语句,而实现不当的缓存可能无法处理如此多的语句。
关于java - 如何将 ArrayList 绑定(bind)到 Oracle 中的 PreparedStatement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/303218/