【发布时间】:2020-04-02 06:04:38
【问题描述】:
在我的 Java 代码中,我通过 JDBC 连接与 MySQL 数据库进行交互。我设置了一个连接和一些语句(用于重用)
connect = DriverManager.getConnection(connectionstring);
statement = connect.createStatement();
statement2 = connect.createStatement();
对于大多数代码, statement.executeQuery(query) 很好,但有些操作是“块”,所以我需要确保它们要么全部一起执行,要么都不执行。我相信下面的代码可以实现这一点。
connect.setAutoCommit(false);
statement.addBatch(insertquery1);
statement.addBatch(insertquery2);
statement.addBatch(insertquery3);
statement.addBatch(insertquery4);
statement.executeBatch();
connect.commit();
connect.setAutoCommit(true);
据我所知,连接调用会影响整个连接,因此会影响语句和语句 2。此外,我似乎可以在创建语句对象之后设置 AutoCommit 值,它仍然适用于它。这个对吗?拆分它们并为自动提交调用保留不同的连接对象会更好/更有效吗?
// objects purely for batch operations
connect = DriverManager.getConnection(connectionstring);
connect.setAutoCommit(false);
statement = connect.createStatement();
// objects for normal operations
connect2 = DriverManager.getConnection(connectionstring);
connect2.setAutoCommit(true);
statement2 = connect2.createStatement();
在我的应用程序中,它们只占不到 1% 的调用,但这个百分比确实需要分批完成。最佳做法是什么?
【问题讨论】: