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