---
title: "批处理 - JDBC 驱动程序  V2.4.3 | OceanBase 文档中心"
description: 批处理 通过将多个 UPDATE 或 INSERT 语句分组为一个批处理，将整个批处理发送到数据库并一起处理，可以减少数据库的往返处理次数，从而提高应用程序性能。 OceanBase Connector/J 使用服务器 PrepareStatement 和 Statements 作为与数据库进行批处理通信的标准，并通…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*bhcER5Qvet8AAAAAAAAAAAAADiGDAQ/original) JDBC 驱动程序 V 2.4.3

# 批处理

更新时间：2026-04-09 15:20:59

[编辑](https://github.com/oceanbase/connector-j-doc/edit/V2.4.3/zh-CN/300.user-guide/800.batch-processing.md)  

通过将多个 `UPDATE` 或 `INSERT` 语句分组为一个批处理，将整个批处理发送到数据库并一起处理，可以减少数据库的往返处理次数，从而提高应用程序性能。

OceanBase Connector/J 使用服务器 `PrepareStatement` 和 `Statements` 作为与数据库进行批处理通信的标准，并通过 `allowMultiQueries` 和 `rewriteBatchedStatements` 两个参数进行管理。如果将 `allowMultiQueries` 或 `rewriteBatchedStatements` 选项设置为 `true`，则 OceanBase Connector/J 将仅使用文本协议。`PrepareStatement`（参数替换）在客户端由驱动程序处理。

对于插入查询，`rewriteBatchedStatements` 用于重写 `batchedStatement` 以在单个 `executeQuery` 中执行。当它处于活跃状态时，`useServerPrepStmts` 选项被设置为 `false`。`allowMultiQueries` 为 `true` 时允许多值查询。

在 Oracle 和 MySQL 两种模式下，OceanBase Connector/J 对于批处理的设置会有不同。

## Oracle 模式下的批处理

### PrepareStatement 处理方式

| **useServerPrepStmts** | **rewriteBatchedStatements** | **allowMultiQueries** | **INSERT 操作** | **UPDATE 操作** |
| --- | --- | --- | --- | --- |
| true | true | true | 重新进行Prepare，一共 addBatch 多少次，sqlString 就添加多少个`values()` 后的括号部分。 | `UPDATE` SQL 语句通过分号";"拼接在一起。 |
| true | true | false | 重新进行Prepare，一共 addBatch 多少次，sqlString 就添加多少个`values()` 后的括号部分。 | `UPDATE` SQL 语句通过分号";"拼接在一起。 |
| true | false | true | Prepare 的 sqlString 是正常格式，之后通过多次 `EXECUTE` 来设置参数。 | Prepare 的 sqlString 是正常格式，之后通过多次 `EXECUTE` 设置参数。 |
| true | false | false | Prepare 的 sqlString 是正常格式，之后通过多次 `EXECUTE` 来设置参数。 | Prepare 的 sqlString 是正常格式，之后通过多次 `EXECUTE` 设置参数。 |
| false | true | true | `INSERT` SQL 语句通过括号"()"拼接在一起，为文本格式。 | `UPDATE` SQL 语句通过分号";"拼接在一起。 |
| false | true | false | `INSERT` SQL 语句通过括号"()"拼接在一起，为文本格式。 | `UPDATE` SQL 语句通过分号";"拼接在一起。 |
| false | false | true | 执行多次 `INSERT` 语句。 | 执行多次 `UPDATE` 语句。 |
| false | false | false | 执行多次 `INSERT` 语句。 | 执行多次 `UPDATE` 语句。 |

### Statement 处理方式

| **useServerPrepStmts** | **rewriteBatchedStatements** | **allowMultiQueries** | **INSERT 操作** | **UPDATE 操作** |
| --- | --- | --- | --- | --- |
| true | true | true | `INSERT` SQL 语句通过括号"()"拼接在一起，为文本格式。 | `UPDATE` SQL 语句通过分号";"拼接在一起（都是文本格式）。 |
| true | true | false | `INSERT` SQL 语句通过括号"()"拼接在一起，为文本格式。 | `UPDATE` SQL 语句通过分号";"拼接在一起（都是文本格式）。 |
| true | false | true | 逐个执行 `INSERT` 语句。 | 逐个执行 `UPDATE` 语句。 |
| true | false | false | 逐个执行 `INSERT` 语句。 | 逐个执行 `UPDATE` 语句。 |
| false | true | true | `INSERT` SQL 语句通过括号"()"拼接在一起，为文本格式。 | `UPDATE` SQL 语句通过分号";"拼接在一起（都是文本格式）。 |
| false | true | false | `INSERT` SQL 语句通过括号"()"拼接在一起，为文本格式。 | `UPDATE` SQL 语句通过分号";"拼接在一起（都是文本格式）。 |
| false | false | true | 逐个执行 `INSERT` 语句。 | 逐个执行 `UPDATE` 语句。 |
| false | false | false | 逐个执行 `INSERT` 语句。 | 逐个执行 `UPDATE` 语句。 |

## MySQL 模式下的批处理

## 示例

```sql
public void test_execute_batch() {
    Connection conn = null;
    try {
        for (int q = 0; q < 2; q++) {
            for (int w = 0; w < 2; w++) {
                for (int e = 0; e < 2; e++) {

                    /**
                     *  useServerPrepStmts = true / false
                     *  rewriteBatchedStatements = true / false
                     *  allowMultiQueries = true / false
                     */
                    boolean uSPS = q == 0 ? false : true;
                    String rBS = w == 0 ? "false" : "true";
                    String aMQ = e == 0 ? "false" : "true";

                    String other_condition = "&rewriteBatchedStatements=" + rBS
                            + "&allowMultiQueries=" + aMQ;
                    conn = ConnectionUtils.getDefObOracleConnection(uSPS, true, other_condition);
                    Statement statement = conn.createStatement();

                    try {
                        statement.execute("DROP TABLE test_batch_t");
                    } catch (SQLException exp) {
                        //e.printStackTrace();
                    }

                    String sql = "create table test_batch_t(id int primary key, c1 varchar2(10))";
                    statement.execute(sql);

                    PreparedStatement ps = conn
                            .prepareStatement("insert into test_batch_t(id, c1) values (?, ?)");

                    for (int j = 0; j < 10; j++) {
                        ps.setInt(1, j);
                        ps.setString(2, j + "_test");
                        ps.addBatch();
                    }
                    ps.executeBatch();

                    ps = conn.prepareStatement("update test_batch_t set id = ? where c1 = ?");

                    for (int j = 0; j < 10; j++) {
                        ps.setInt(1, j);
                        ps.setString(2, j + "_test");
                        ps.addBatch();
                    }
                    ps.executeBatch();
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
