1

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

4

3 回答 3

1

This probably won't help you now, but I read that JDBC 4 will support array types as defined in the 2003 version of SQL.

于 2009-08-29T06:15:43.600 回答
1

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

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

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

示例:IN 表达式被替换为 JOIN 到临时表。

于 2009-08-29T06:51:21.843 回答
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

试着看看这是否对你有帮助。

于 2009-08-29T07:02:05.753 回答