java jdbc 批处理详解,批处理 - JDBC 指南_教程_Java开发社区

批处理

批处理是指你将关联的 SQL 语句组合成一个批处理,并将他们当成一个调用提交给数据库。

当你一次发送多个 SQL 语句到数据库时,可以减少通信的资源消耗,从而提高了性能。

JDBC 驱动程序不一定支持该功能。你可以使用 DatabaseMetaData.supportsBatchUpdates() 方法来确定目标数据库是否支持批处理更新。如果你的JDBC驱动程序支持此功能,则该方法返回值为 true。

Statement,PreparedStatement 和 CallableStatement 的 addBatch() 方法用于添加单个语句到批处理。

executeBatch() 方法用于启动执行所有组合在一起的语句。

executeBatch() 方法返回一个整数数组,数组中的每个元素代表了各自的更新语句的更新数目。

正如你可以添加语句到批处理中,你也可以用 clearBatch() 方法删除它们。此方法删除所有用 addBatch() 方法添加的语句。但是,你不能有选择性地选择要删除的语句。

批处理和 Statement 对象

使用 Statement 对象来使用批处理所需要的典型步骤如下所示-

使用 createStatement() 方法创建一个 Statement 对象。

使用 setAutoCommit() 方法将自动提交设为 false。

被创建的 Statement 对象可以使用 addBatch() 方法来添加你想要的所有SQL语句。

被创建的 Statement 对象可以用 executeBatch() 将所有的 SQL 语句执行。

最后,使用 commit() 方法提交所有的更改。

示例

下面的代码段提供了一个使用 Statement 对象批量更新的例子-

// Create statement object

Statement stmt = conn.createStatement();

// Set auto-commit to false

conn.setAutoCommit(false);

// Create SQL statement

String SQL = "INSERT INTO Employees (id, first, last, age) " +

"VALUES(200,'Zia', 'Ali', 30)";

// Add above SQL statement in the batch.

stmt.addBatch(SQL);

// Create one more SQL statement

String SQL = "INSERT INTO Employees (id, first, last, age) " +

"VALUES(201,'Raj', 'Kumar', 35)";

// Add above SQL statement in the batch.

stmt.addBatch(SQL);

// Create one more SQL statement

String SQL = "UPDATE Employees SET age = 35 " +

"WHERE id = 100";

// Add above SQL statement in the batch.

stmt.addBatch(SQL);

// Create an int[] to hold returned values

int[] count = stmt.executeBatch();

//Explicitly commit statements to apply changes

conn.commit();

批处理和 PrepareStatement 对象

使用 prepareStatement 对象来使用批处理需要的典型步骤如下所示-

使用占位符创建 SQL 语句。

使用任一 prepareStatement() 方法创建 prepareStatement 对象。

使用 setAutoCommit() 方法将自动提交设为 false。

被创建的 Statement 对象可以使用 addBatch() 方法来添加你想要的所有 SQL 语句。

被创建的 Statement 对象可以用 executeBatch() 将所有的 SQL 语句执行。

最后,使用 commit() 方法提交所有的更改。

下面的代码段提供了一个使用 PrepareStatement 对象批量更新的示例-

// Create SQL statement

String SQL = "INSERT INTO Employees (id, first, last, age) " +

"VALUES(?, ?, ?, ?)";

// Create PrepareStatement object

PreparedStatemen pstmt = conn.prepareStatement(SQL);

//Set auto-commit to false

conn.setAutoCommit(false);

// Set the variables

pstmt.setInt( 1, 400 );

pstmt.setString( 2, "Pappu" );

pstmt.setString( 3, "Singh" );

pstmt.setInt( 4, 33 );

// Add it to the batch

pstmt.addBatch();

// Set the variables

pstmt.setInt( 1, 401 );

pstmt.setString( 2, "Pawan" );

pstmt.setString( 3, "Singh" );

pstmt.setInt( 4, 31 );

// Add it to the batch

pstmt.addBatch();

//add more batches

.

.

.

.

//Create an int[] to hold returned values

int[] count = stmt.executeBatch();

//Explicitly commit statements to apply changes

conn.commit();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值