Java写一个转账案例_JDBC【使用事务实现转账案例】

本文演示了一个使用Java JDBC实现的转账案例,通过设置事务确保转账操作的可靠性。在转账过程中,首先从Tom账户中减去500元,然后尝试将500元加到Jack账户。如果在转账过程中出现异常,如模拟的除以0错误,事务将回滚,防止数据不一致。
摘要由CSDN通过智能技术生成

使用事务保证转账的可靠性

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

public class TransTest01 {

//1.tom向jack 转账 500元

//使用事务,保证转账的可靠性

//1.保证每条DML都不自动提交

//2.保证执行两次sql公用一个连接

public static void main(String[] args){

Connection con = null;

try {

con = JDBCUtils.getConnection();

//取消事务的自动提交

con.setAutoCommit(false);

String sql = "update user set money = money - 500 where name = ?";

TransTest01.excuteDBTran(con,sql,"tom");

//模拟产生网络异常

System.out.println(100/0);

String sql1 = "update user set money = money + 500 where name = ?";

TransTest01.excuteDBTran(con,sql1,"jack");

System.out.println("转账成功");

} catch (Exception e) {

System.out.println("交易过程中发生异常,交易终止...");

try {

con.rollback();

} catch (SQLException ex) {

ex.printStackTrace();

}

}finally {

try {

con.setAutoCommit(true);

} catch (SQLException e) {

e.printStackTrace();

}

TransTest01.closeConnection(con);

}

}

/**

* 考虑事务后的通用增删改方法

* @param sql sql语句

* @param args 填充占位符参数

* @throws Exception

*/

public static void excuteDBTran(Connection con,String sql,Object ...args) {

PreparedStatement ps = null;

try {

ps = con.prepareStatement(sql);

for (int i=0;i

ps.setObject(i+1, args[i]);

}

ps.execute();

} catch (Exception e) {

e.printStackTrace();

} finally {

JDBCUtils.closeConnection(null, ps);

}

}

/**

* 关闭资源

* @param con 连接对象

*/

//关闭资源

public static void closeConnection(Connection con){

try {

if(con != null)

con.close();

}catch (Exception e){

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值