Java中通过JDBC使用MySQL的AutoCommit语句的最佳实践

问题描述 投票:0回答:1

在我的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);

据我所知,连接调用会影响整个连接,因此会同时影响statement和statement2。另外,我似乎可以设置AutoCommit值after我创建了语句对象,它仍然适用于该对象。它是否正确?并且,将它们拆分并保留另一个连接对象(仅用于如下所示的自动提交调用)是否是一种更好的做法/效率更高?

            // 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%的呼叫,但是该百分比确实需要分批完成。什么是最佳做法?

在我的Java代码中,我通过JDBC连接与MySQL数据库进行交互。我建立了一个连接,并声明了一些语句(以供重用):connect = DriverManager.getConnection(connectionstring); ...

java mysql jdbc
1个回答
1
投票

将自动提交设置为false的全部目的是使多个SQL语句都可以在同一事务中运行。而且,如果您的4条插入语句中的任何一条出了问题,则整个事务在逻辑上将被回滚,这样您就不会在数据库中出现不一致的数据。您已经遵循的模式是最佳实践:

© www.soinside.com 2019 - 2024. All rights reserved.