Java - 准备好的语句和数组

时间:2009-08-29 05:58:58

标签: java sql database arrays prepared-statement

如何在预准备语句中处理数组?即,我想做一个查询,我得到的一个参数是一个字符串数组,我想在查询中使用(不要选择有一个字段在数组中的行)?

3 个答案:

答案 0 :(得分:1)

现在这可能对您没有帮助,但我读到JDBC 4将支持2003版SQL中定义的数组类型。

答案 1 :(得分:1)

某些JDBC驱动程序可能已经(在JDBC 4之前)包含在预准备语句中支持数组类型参数的专有扩展 - 您需要为此参考API。这意味着您必须在SQL中使用和操作类似数组的类型。

一种解决方法是使用临时表。这些是这种解决方案的元步骤:

  1. 开始交易(如果您在交易中,这是自动的 方法 - EJB或Spring);
  2. 使用带有预准备语句的JDBC批量插入创建并填充带有arrary元素的临时表(临时表必须具有事务范围 - 这也是数据库专有但至少得到Oracle支持);
  3. 构造所需的SQL,其中包括对临时表的连接以使用数组值(它可以是显式的内部或外部JOIN或隐式连接,例如使用EXISTS等);
  4. 提交(或应用程序异常时回滚)事务(这应该销毁临时表;并发事务应该与临时表的同名没有冲突)。
  5. 示例:IN表达式被JOIN替换为临时表。

答案 2 :(得分:1)

这很大程度上取决于使用的RDBMS。通常可以使用供应商的jdbc驱动程序扩展来完成此类功能。

我找到的2个变种(对于Oracle): http://blogs.itemis.de/kloss/2009/03/05/arrays-preparedstatements-jdbc-and-oracle/

http://www.angelfire.com/home/jasonvogel/java_jdbc_arrays.html

试着看看这对你有帮助。