java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE, JavaME, JavaSE)的总称。本站提供基于Java框架struts,spring,hibernate等的桌面应用、web交互及移动终端的开发技巧与资料
保持永久学习的心态,将成就一个优秀的你,来 继续搞起java知识。
需求:模拟张三将账户中的1000元转给了李四。
流程:
1.查询支出方余额。
2.查询收款方账号。
3.更新支出方的余额。
4.更新收款方的余额。
实现代码:
public void payDemo(double sum,String payId,String recId){
Connection con = null;
String sql;
Double payBalance,recBalance;
try{
con = DBUtil.getConnection();
sql = "SELECT * FROM accounts WHERE id=?";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1,payId);
ResultSet rs = ps.executeQuery();
while(rs.next());
{
payBalance = rs.getDouble("balance"); //获取付款方余额
}
if(payBalance<sum)
{
System.out.println("余额不足!");
return;
}
ps.setString(1,"recId");
ResultSet rs1 = ps.executeQuery();
if(!rs1.next())
{
System.out.println("账户不存在");
return;
}
recBalance = rs1.getDouble("balance"); //获取收款方余额
con.setAutoCommit(false); //禁止事务自动提交,防止业务中出现异常导致存款丢失。
sql = "UPDATE accounts SET balance=? WHERE id=?"; //重新设置<a href="http://www.cfei.net/archives/tag/sql" title="浏览关于“SQL”的文章" target="_blank" class="tag_link">SQL</a>语句
ps.setDouble(1,payBalance-sum); //将付款方余额减去转账金额
ps.setString(2,payId);
ps.executeUpdate();
ps.setDouble(1,payBalance+sum);
ps.setString(2,recId); //同上
ps.executeUpdate();
con.commit(); //最后两步都完成后,才提交事务。
}catch(SQLException e){
e.printStackTrace();
throw new RuntimeException("转账失败",e);
con.rollback(); //发生异常,则事务回滚。
}finally{
DBUtil.close(con);
}
}
因为水平有限,难免有疏忽或者不准确的地方,希望大家能够直接指出来,我会及时改正。一切为了知识的分享。
后续会有更多的精彩的内容分享给大家。
支付宝扫一扫
微信扫一扫
