В моем коде Java я взаимодействую с базой данных MySQL через соединение JDB C. Я устанавливаю соединение и некоторые операторы (для повторного использования)
connect = DriverManager.getConnection(connectionstring);
statement = connect.createStatement();
statement2 = connect.createStatement();
Для большей части кода Statement.executeQuery (запрос) подходит, но некоторые операции являются «блоками», поэтому мне нужно убедиться, что они либо все вместе проходят, либо никто из них этого не делает. Я полагаю, что следующий код достигает этого.
connect.setAutoCommit(false);
statement.addBatch(insertquery1);
statement.addBatch(insertquery2);
statement.addBatch(insertquery3);
statement.addBatch(insertquery4);
statement.executeBatch();
connect.commit();
connect.setAutoCommit(true);
Насколько я могу судить, вызовы connect влияют на все соединение, поэтому влияют и на оператор, и на оператор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% вызовов, но этот процент делает нужно делать партиями. Что такое лучшая практика?