ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

事务(转账功能)

2020-08-22 09:03:16  阅读:210  来源: 互联网

标签:转账 事务 String int money 功能 conn row


一、事务概述

转账时必须双方同时成功,要么同时失败,就是把双方组成单元放到事务中

1)显示的开启一个事务:start transaction

2)事务提交:commit代表从开启事务到事务提交 中间的所有的sql都认为有效   真正的更新数据库

3)事务的回滚:rollback 代表事务的回滚 从开启事务到事务回滚 中间的所有的   sql操作都认为无效数据库没有被更新

一、JDBC事务操作

默认是自动事务:

执行sql语句:executeUpdate()  ---- 每执行一次executeUpdate方法 代表     事务自动提交

通过jdbc的API手动事务:

开启事务:conn.setAutoComnmit(false);

提交事务:conn.commit();

回滚事务:conn.rollback();

注意:控制事务的connnection必须是同一个

执行sql的connection与开启事务的connnection必须是同一个才能对事务进行控制

 

一、事务的特性和隔离级别(概念性问题---面试)

事务的特性ACID

        1)原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作          要么都发生,要么都不发生。 

        2)一致性(Consistency)一个事务中,事务前后数据的完整性必须保持一致。

        3)隔离性(Isolation)多个事务,事务的隔离性是指多个用户并发访问数据库时,             一个用户的     事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。

        4)持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变          就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

 

 转账功能

//jsp
<form action="${pageContext.request.contextPath }/ZhuanzhangServlet" method="post">
   转入账户<input type="text" name="in"><br>
   转除账户<input type="text" name="out"><br>
   金额<input type="text" name="money"><br>
   <input type="submit" name="转账">
</form>
public class ZhuanzhangServlet extends HttpServlet {
private AccService accService=new AccService();
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       request.setCharacterEncoding("UTF-8");
       //获取三个参数
       String out=request.getParameter("out");
       String in=request.getParameter("in");
       String moneyStr=request.getParameter("money");
       double money=Double.parseDouble(moneyStr);//字符串转Double
       int row=accService.transfer(out, money, in);
       //解决响应
       response.setContentType("text/html;charset=UTF-8");
       if(row>0){
           response.getWriter().write("转账成功");
       }else{
           response.getWriter().write("转账失败");
       }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

 

public class AccDao {
//转出
    public int outMoney(Connection conn,String out,double money) throws SQLException{
        QueryRunner qr=new QueryRunner();
        String sql="update account set money=money-? where name=?";
        int row=qr.update(conn,sql,money,out);
        return row;
        
    }
    public int inMoney(Connection conn,String in,double money) throws SQLException{
        QueryRunner qr=new QueryRunner();
        String sql="update account set money=money+? where name=?";
        int row=qr.update(conn,sql,money,in);
        return row;
        
    }
}
public class AccService {
    private AccDao accDao=new AccDao();
    //转出(转账方法)
        public int transfer(String out,double money,String in){
            int row=0;
            int row1=0;
            Connection conn=null;
            try {
                //获取连接对象
                conn=MyDBUtils.getConn();
                //开启事务
                conn.setAutoCommit(false);
                row=accDao.outMoney(conn,out, money);    
                int y=1/0;
                row1=accDao.inMoney(conn,in, money);
            } catch (Exception e) {
                //回滚
                try {
                    conn.rollback();
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                e.printStackTrace();
            } finally{
                try {
                    //提交事务
                    conn.commit();
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(row>0&&row1>0){
                return 1;
            }else{
                return 0;
            }
        }
}

 

标签:转账,事务,String,int,money,功能,conn,row
来源: https://www.cnblogs.com/111wdh/p/13544301.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有