Java - 准备好的语句和数组

发布于 2024-08-03 05:39:40 字数 71 浏览 5 评论 0原文

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

How can I handle an array in a prepared statement? i.e, I want to do a query and one of the parameters I get is an array of strings which I want to use in the query (Don't select rows that have a field that's in the array)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

抚你发端 2024-08-10 05:39:40

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

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

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

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

Some JDBC drivers may already (before JDBC 4) contain proprietary extensions that support array-type parameters in prepared statements - you would need to consult with API for this. This would mean that you have to use and manipulate array-like type in SQL.

One work around would be using temporary tables. These are meta-steps for such solution:

  1. Begin transaction (this is automatic if you are inside transactional
    method - EJB or Spring);
  2. Using JDBC batch insert with prepared statement create and populate a temporary table with arrary elements (temporary table must have transactional scope - this is also proprietary to databases but supported by Oracle at least);
  3. Construct your desired SQL that includes a join to temporary table to use array values (it could be explicit inner or outer JOIN or implicit join, e.g. using EXISTS, etc.);
  4. Commit (or rollback if application exception) transaction (this should destroy temporary table; concurrent transactions should have no conflict for the same name of temporary table).

Example: IN expression gets replaced with JOIN to temporary table.

维持三分热 2024-08-10 05:39:40

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

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.

心是晴朗的。 2024-08-10 05:39:40

这很大程度上取决于所使用的 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

尝试看看这是否对您有帮助。

That pretty much depends upon RDBMS being used. Often such functionality can be accomplished using vendor's jdbc driver extensions.

2 variants I found are (for Oracle):
http://blogs.itemis.de/kloss/2009/03/05/arrays-preparedstatements-jdbc-and-oracle/

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

Try to look if that would help you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文