dbutils + mysql事务

本文深入剖析了为何在软件开发领域,大多数程序员未能晋升为架构师的原因,通过实际代码示例展示了事务管理在数据库操作中的关键作用,并探讨了MySQL InnoDB引擎对于事务有效性的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public static void main(String[] args) throws SQLException {
	        boolean originalAutoCommitSetting = false;
	        Connection connection = null;
	        try {
	            connection = DbPoolConnection.getDataSource().getConnection();
	            /**
	             * 在创建QueryRunner对象时,不传递数据源给它,是为了保证这两条SQL在同一个事务中进行,
	            * 我们手动获取数据库连接,然后让这两条SQL使用同一个数据库连接执行
	             */
	            QueryRunner runner = new QueryRunner();
	            originalAutoCommitSetting = connection.getAutoCommit();
	            System.out.println("originalAutoCommitSetting:" + originalAutoCommitSetting);
	            //开启事务
	            connection.setAutoCommit(false);
	            System.out.println("originalAutoCommitSetting2:" + connection.getAutoCommit());
	            String sql1 = "insert into ssq(qishu) values(?)";
	             String sql2 = "insert into ssq(qishu) values(?)";
	             Object[] paramArr1 = {123};
	             Object[] paramArr2 = {456};
	             runner.update(connection,sql1,paramArr1);
	               //模拟程序出现异常让事务回滚
	               int x = 1/0;
	             runner.update(connection,sql2,paramArr2);

	            connection.commit();

	        }catch (Exception e) {
	                    if(null != connection){
	        	                //出现异常之后就回滚事务
	                    	connection.rollback();
	        	            }
	                    e.printStackTrace();
	        	        }finally{
	        	            //关闭数据库连接
	        	        	 if(null != connection){
	        	        	connection.setAutoCommit(originalAutoCommitSetting);
		                    connection.close();
	        	        	 }
	        	        } 
	    }

注意,mysql必须是InnoDB引擎,否则事务无效!

转载于:https://my.oschina.net/yunte/blog/609273

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值