【问题标题】:Is it possible to run java commands during a batch process?是否可以在批处理过程中运行 java 命令?
【发布时间】:2013-09-30 21:13:29
【问题描述】:

我的意思是我有一个程序可以批量执行 100k 的插入操作。这些插入中的每一个都从插入时的序列中分配了一个新的 ID。出于显而易见的原因,我想保留批处理过程,但我还需要在创建每个 ID 时取出它,并在继续下一个插入之前对其进行处理。有没有办法做到这一点?

【问题讨论】:

  • 在 PostgreSQL 中不是非常了解,但是有没有办法让你准备好的语句返回密钥?我正在使用带有 Jdbc 连接的 MySQL DB,语法是 PreparedStatement pstmt = JdbcDB.getConnection().prepareStatement("SQL GOES HERE", Statement.RETURN_GENERATED_KEYS); 重要的部分是 Statement.RETURN_GENERATED_KEYS。注意JdbcDB 只是我创建的一个包装类。 getConnection() 返回 java.sql.Connection
  • 这确实有点帮助,我没有意识到这是一个选项,而这是我正在寻找的东西。但是,即使它返回键,在批处理移动到下一个之前,我有没有办法在 java 中使用该键执行操作?

标签: java postgresql batch-processing bulkinsert sql-insert


【解决方案1】:

PostgreSQL 中的工作方式与 MySQL 不同。首先,您必须将插入内容编写为:

INSERT INTO foo (...) VALUES (...)
RETURNING id;

RETURNING id 很重要,因为它告诉插入语句返回一些东西。然后,您应该能够像从 select 语句中所期望的那样拉回 id。

我不太确定 PostgreSQl 的 JDBC 驱动程序如何在批处理方面实现这一点。如果必须,您可以修改它以将 id 存储在临时表中或您可以在之后查询的东西中。

【讨论】:

    最近更新 更多