完整示例
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接口,对事务内的操作进行回滚。