JDBC学习之路(六)事务的概念和处理

本文通过一个Java示例代码展示了如何使用事务来确保数据库操作的一致性和安全性。具体包括禁用自动提交、设置保存点及回滚等关键步骤。
部署运行你感兴趣的模型镜像

数据库的操作对事务这一概念非常重要,事务的概念是一个不可分割的整体,具有原子性。比如银行转账,当从一方扣钱完毕出现异常,结果接收方没有收到钱,这样是绝对不行的,所以需要回滚,这就是事务。

下面呈上例子代码,这里模仿从一个人的钱里面扣钱,但是回滚到指定的地方,其实首先需要指定自动提交为false,然后一直等到所有事务处理完毕才能提交,然后可以设置保存点,然后回滚的时候回滚到指定的位置。

package com.bird.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Savepoint;

import com.bird.jdbc.dao.DaoException;

public class TxTest {

	/**
	 * @param args
	 * @throws SQLException 
	 */
	public static void main(String[] args) throws SQLException {
		test();
	}
	
	
	public static void test() throws SQLException{
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		Savepoint sp = null;
		
		try {
			con = Temple.getConnection();
			
			con.setAutoCommit(false);//设置自动提交为false,禁止自动提交
			
			String sql = "update user set money=money-10 where id=1";
			ps = con.prepareStatement(sql);
			ps.executeUpdate();
			
			sp = con.setSavepoint();
			
			sql = "update user set money=money-10 where id=3";
			ps=con.prepareStatement(sql);
			ps.executeUpdate();
			
			sql = "select money from user where id=2";
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();
			float money = 0.0f;
			if(rs.next()){
				money = rs.getFloat("money");
			}
			if(money > 200)
				throw new RuntimeException("钱够多了,超过最大值");
			
			sql = "update user set money=money+10 where id=2";
			ps=con.prepareStatement(sql);
			ps.executeUpdate();
			
			con.commit();//一并提交,放到一个事件中去
			
		} catch (RuntimeException e) {
			if(con != null && sp != null)
				con.rollback(sp);
				con.commit();
			throw new DaoException(e);
		} catch (SQLException e) {
			if(con != null)
				con.rollback();
			throw new DaoException(e);
		} finally{
			Temple.free(con, ps, rs);
		}
	}
}
虽然代码很短,而且关于事务的代码其实是很少的,所以好好记住

您可能感兴趣的与本文相关的镜像

Dify

Dify

AI应用
Agent编排

Dify 是一款开源的大语言模型(LLM)应用开发平台,它结合了 后端即服务(Backend as a Service) 和LLMOps 的理念,让开发者能快速、高效地构建和部署生产级的生成式AI应用。 它提供了包含模型兼容支持、Prompt 编排界面、RAG 引擎、Agent 框架、工作流编排等核心技术栈,并且提供了易用的界面和API,让技术和非技术人员都能参与到AI应用的开发过程中

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值