JDBC事务处理、提交、回滚。

package com.softeem.bank.dao;

import java.util.List;

public interface BaseDAO<T> {
	public boolean insert(T t);

	public boolean delete(T t);

	public boolean update(T t);

	public List<T> findAll();
	public T findById(T t);

}

package com.softeem.bank.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import com.softeem.bank.dto.Account;
import com.softeem.utils.DAOHelper;
import com.softeem.utils.DAOHelper.CallBack;

public class AccountDAO implements BaseDAO<Account>{

	private Connection conn;
	
	public AccountDAO(Connection conn) {
		this.conn = conn;
	}
	
	@Override
	public boolean insert(Account t) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean delete(Account t) {
		// TODO Auto-generated method stub
		return false;
	}

	//更新金额
	@Override
	public boolean update(Account t) {
		return DAOHelper.execUpdate(conn, "update tbaccount set cash=? where account=?", t.getCash(),t.getAccount());
	}

	@Override
	public Account findById(final Account t) {
		return DAOHelper.execQueryOne("select * from tbaccount where id=?", new CallBack<Account>() {
			@Override
			public Account getData(ResultSet rs) {
				try {
					if(rs.next()){
						t.setAccount(rs.getString("account"));
						t.setCash(rs.getDouble("cash"));
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}
				return t;
			}
		}, t.getId());
	}
 
	@Override
	public List<Account> findAll() {
		// TODO Auto-generated method stub
		return null;
	}

}

package com.softeem.bank.dto;

public class Account {

	private int id;
	private String account;
	private double cash;
	
	public Account() {
		// TODO Auto-generated constructor stub
	}
	
	public Account(String account, double cash) {
		super();
		this.account = account;
		this.cash = cash;
	}

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getAccount() {
		return account;
	}
	public void setAccount(String account) {
		this.account = account;
	}
	public double getCash() {
		return cash;
	}
	public void setCash(double cash) {
		this.cash = cash;
	}

	@Override
	public String toString() {
		return "Account [id=" + id + ", account=" + account + ", cash=" + cash + "]";
	}
	
	
}
package com.softeem.bank.service;

import java.sql.Connection;
import java.sql.SQLException;

import com.softeem.bank.dao.AccountDAO;
import com.softeem.bank.dto.Account;
import com.softeem.utils.BaseConn;


/**
 * 业务逻辑层
 * @author mrchai
 *
 */
public class AccountService extends BaseConn{

	//事务
	public synchronized void  transfAccount(Account a,Account b,double money){
		Connection conn = getConn();
		//分别查询出A,B账号个各自余额
		AccountDAO dao = new AccountDAO(conn);
		a = dao.findById(a);
		b = dao.findById(b);
		if(a.getAccount() != null && b.getAccount() != null){
			//判断账号a余额是否足够
			if(a.getCash() >= money){
				//减少A账号的余额
				a.setCash(a.getCash() - money);
				//增加B账号的余额
				b.setCash(b.getCash() + money);
				try {
					//关闭事务自动提交
					conn.setAutoCommit(false);
					//开始转账
					boolean f1 = dao.update(a);
//					System.out.println(5/0);
					boolean f2 = dao.update(b);
					if(f1 && f2){						
						conn.commit();
						System.out.println("转账成功!");
					}
				} catch (Exception e) {
					try {
						conn.rollback();//事务回滚
						System.out.println("转账失败");
					} catch (SQLException e1) {
						e1.printStackTrace();
					}
					e.printStackTrace();
				}
				
			}else{
				System.out.println("余额不足!");
			}
		}else{
			System.out.println("账号A或者B不存在");
		}
		
	}
	
	public static void main(String[] args) {
		Account a = new Account();
		Account b = new Account();
		a.setId(1);
		b.setId(3);
		new AccountService().transfAccount(a, b, 1000);
	}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值