更新时间:2025-08-19 GMT+08:00
分享

完整示例

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Arrays;
import java.sql.DriverManager;
public class TestBatch {
    public static Connection getConnection() throws ClassNotFoundException, SQLException{
 String driver = "com.huawei.gaussdb.jdbc.Driver";
        // 指定数据库sourceURL($ip、$port、database请根据业务场景进行修改)。
        String sourceURL = "jdbc:gaussdb://$ip:$port/database";
        // 用户名和密码从环境变量中获取。
        String userName = System.getenv("EXAMPLE_USERNAME_ENV");
        String password = System.getenv("EXAMPLE_PASSWORD_ENV");
        Class.forName(driver);
        return DriverManager.getConnection(sourceURL, userName, password);
    }
    public static void main(String[] args) {
        String sql = "insert into test_batch(v1,v2) values(?,?)";
        try (Connection conn = getConnection(); PreparedStatement preparedStatement = conn.prepareStatement(sql)) {
            conn.setAutoCommit(false);
            for (int i = 0; i < 5; i++) {
                preparedStatement.setInt(1, 1);
                preparedStatement.setString(2, "value2_" + i);
                preparedStatement.addBatch();
            }
            int[] results = preparedStatement.executeBatch();
            conn.commit();
            System.out.println(Arrays.toString(results));
        } catch (ClassNotFoundException | SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

结果验证

完整示例的运行结果展示批量操作影响的数据条数。

使用preparedStatement执行批量插入时,执行结果会返回一个int类型的数组results,results[0]表示本次批量操作影响的数据条目数总和。

[5, 0, 0, 0, 0]

回退方法

通过事务对象的rollback接口,对事务内的操作进行回滚。

相关文档