使用 PreparedStatement 进行批处理

Posted

技术标签:

【中文标题】使用 PreparedStatement 进行批处理【英文标题】:Batch processing using PreparedStatement 【发布时间】:2017-07-04 12:31:55 【问题描述】:

当我说我只能使用 1 个字符串 sql 查询在 Java 中使用 PreparedStatement 进行批处理时,我说得对吗?

例如,这是我要使用PreparedStatement处理的批次:

INSERT INTO tbl_Customer VALUES(?,?,?,?)
INSERT INTO tbl_Order VALUES(?,?,?,?,?)

有什么方法可以批量处理这些语句?对不起我的英语不好。

【问题讨论】:

using JDBC preparedStatement in a batch的可能重复 您不能在同一批次中同时执行这两项操作。但是,您可以并行使用两个 PreparedStatement。 【参考方案1】:

你下面的模板:

PreparedStatement ps = null;

ps = conn.prepareStatement("INSERT INTO tbl_Customer VALUES(?,?,?,?)");
while ()  
    ...
    ps.addBatch();

result = ps.executeBatch();

【讨论】:

我想插入 2 个不同的表。您的代码仅有助于将许多记录添加到 1 个表中。 使用 1 个函数,但用 2 个 SQL 调用它两次 使用批处理的要点是当记录出现​​问题时可以回滚。因此,没有记录插入到数据库中。如果我使用 2 个 SQL,另一个仍然插入到数据库中,对吗? @TeraMind 那么你应该使用transactions,如果你想确保两个语句都成功执行。 @Tera Mind。见飞行评论。如果您还没有调用 commit 并保持在相同的上下文中,则回滚将回滚两个批次

以上是关于使用 PreparedStatement 进行批处理的主要内容,如果未能解决你的问题,请参考以下文章

JDBC preparedStatement分页和统计,批处理和事务

将 PreparedStatement 批处理与 Statement 批处理混合,可以吗?

使用JDBC进行批处理

大数据必学Java基础(九十六):PreparedStatement完成CURD和批处理

使用JDBC进行批处理

获取使用 PreparedStatement 更新的行数