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);
}
}
JDBC事务处理、提交、回滚。
最新推荐文章于 2024-11-12 23:25:06 发布