我想在 同一批中 发送 两个不同的准备好的语句 。
目前,正如您在注释行中看到的那样,我将一分为二,并且可以正常工作,但这不是这里的主要目标。谁能告诉我用什么代替这些评论,以使此功能正常工作?
import java.lang.ClassNotFoundException; import java.math.BigDecimal; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.DriverManager; public class Main { public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatementWithdraw = null; PreparedStatement preparedStatementDeposit = null; try { Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/youtube", "root", "root"); preparedStatementWithdraw = withdrawFromChecking(connection, preparedStatementWithdraw, new BigDecimal(100), 1); preparedStatementDeposit = depositIntoSaving(connection, preparedStatementDeposit, new BigDecimal(300), 1); //preparedStatementDeposit.executeBatch(); //preparedStatementWithdraw.executeBatch(); System.out.println("Account Modified!"); } catch(ClassNotFoundException error) { System.out.println("Error: " + error.getMessage()); } catch(SQLException error) { System.out.println("Error: " + error.getMessage()); } finally { if(connection != null) try{connection.close();} catch(SQLException error) {} if(preparedStatementDeposit != null) try{preparedStatementDeposit.close();} catch(SQLException error) {} } } public static PreparedStatement withdrawFromChecking(Connection connection, PreparedStatement preparedStatement, BigDecimal balance, int id) throws SQLException { preparedStatement = connection.prepareStatement("UPDATE bankAccount SET checkingBalance = checkingBalance - ? WHERE id = ?"); preparedStatement.setBigDecimal(1, balance); preparedStatement.setInt(2, id); preparedStatement.addBatch(); return preparedStatement; } public static PreparedStatement depositIntoSaving(Connection connection, PreparedStatement preparedStatement, BigDecimal balance, int id) throws SQLException { preparedStatement = connection.prepareStatement("UPDATE bankAccount SET savingBalance = savingBalance + ? WHERE id = ?"); preparedStatement.setBigDecimal(1, balance); preparedStatement.setInt(2, id); preparedStatement.addBatch(); return preparedStatement; } }
您不能在一个批处理中执行两个不同的语句。正如@dan所提到的,您可以-并且 必须 -在单个事务中完成它们。
另一种选择是使用存储过程,该存储过程可以在一次往返服务器的过程中完成所有操作,同时保持单个事务的好处