下载 JDBC 驱动程序
为了提高对 SQL Server 数据库进行多项更新时的性能,Microsoft JDBC Driver for SQL Server 提供了将多项更新作为一个工作单元提交的功能,也称作“批处理”。
SQLServerStatement
、
SQLServerPreparedStatement
和
SQLServerCallableStatement
类都可用于提交批量更新。
addBatch
方法可用于添加命令。
clearBatch
方法可用于清除命令列表。
executeBatch
方法可用于提交要处理的所有命令。 只有返回简单更新计数的数据定义语言 (Data Definition Language, DDL) 和数据操作语言 (Data Manipulation Language, DML) 语句可作为批处理的一部分运行。
executeBatch 方法返回一个由 int 值组成的数组,这些值对应于每个命令的更新计数
。 如果其中一条命令失败,则会引发 BatchUpdateException,应使用 BatchUpdateException 类的 getUpdateCounts 方法检索更新计数数组。 如果一条命令失败,则驱动程序会继续处理剩余的命令。 但是,如果一条命令有语法错误,批处理中的语句就会失败。
如果不是必须使用更新计数,可以先向 SQL Server 发送一条 SET NOCOUNT ON 语句。 这将减少网络流量并同时提高应用程序的性能。
作为示例,在 AdventureWorks2019 示例数据库中创建下表:
CREATE TABLE TestTable
(Col1 int IDENTITY,
Col2 varchar(50),
Col3 int);
在下面的示例中,将向此函数传递 AdventureWorks2019 示例数据库的打开连接,并使用 addBatch 方法创建要执行的语句,然后调用 executeBatch 方法向数据库提交批处理。
public static void executeBatchUpdate(Connection con) {
try {
Statement stmt = con.createStatement();
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('X', 100)");
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Y', 200)");
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Z', 300)");
int[] updateCounts = stmt.executeBatch();
stmt.close();
catch (Exception e) {
e.printStackTrace();
通过 JDBC 驱动程序使用语句