Java手动提交事务
1、使用Connection对象的setAutoCommit()方法关闭自动提交功能
2、执行SQL语句
3、使用Connection对象的commit()方法手动提交事务
4、使用Connection对象的rollback()方法回滚事务
示例代码:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class ManualTransactionExample { public static void main(String[] args) { Connection connection = null; try { // 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 获取数据库连接 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password"); // 关闭自动提交功能 connection.setAutoCommit(false); // 创建PreparedStatement对象 PreparedStatement pstmt1 = connection.prepareStatement("UPDATE account SET balance = balance 100 WHERE id = 1"); PreparedStatement pstmt2 = connection.prepareStatement("UPDATE account SET balance = balance + 100 WHERE id = 2"); // 执行SQL语句 pstmt1.executeUpdate(); pstmt2.executeUpdate(); // 手动提交事务 connection.commit(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { try { // 发生异常,回滚事务 connection.rollback(); } catch (SQLException ex) { ex.printStackTrace(); } e.printStackTrace(); } finally { if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }
Java自动提交事务
1、使用Connection对象的setAutoCommit()方法开启自动提交功能(默认为true)
2、执行SQL语句,事务会自动提交或回滚,取决于SQL语句是否成功执行
3、不需要手动调用commit()或rollback()方法,系统会自动处理事务的提交和回滚
示例代码:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class AutoTransactionExample { public static void main(String[] args) { Connection connection = null; try { // 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 获取数据库连接 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password"); // 开启自动提交功能(默认为true) connection.setAutoCommit(true); // 创建PreparedStatement对象 PreparedStatement pstmt1 = connection.prepareStatement("UPDATE account SET balance = balance 100 WHERE id = 1"); PreparedStatement pstmt2 = connection.prepareStatement("UPDATE account SET balance = balance + 100 WHERE id = 2"); // 执行SQL语句,事务会自动提交或回滚,取决于SQL语句是否成功执行 pstmt1.executeUpdate(); pstmt2.executeUpdate(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/642672.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复