事务

概念

一件事情有n个组成单元 要不这n个组成单元同时成功 要不n个单元就同时失败,就是将n个组成单元放到一个事务中

mysql事务

默认事务:一条sql语句,默认开启和提交

手动事务:

  开启:start transaction,开启事务后的操作都是在内存中进行,并不会对数据库中的数据进行修改

  提交:commit,将开启到提交之间执行的语句结果作用到数据库中的数据上

  回滚:rollback,回到事务开启时的状态,之前的操作全部无效处理

JDBC事务

默认事务:execute Update()执行sql语句,执行一次就是提交一次事务

手动事务:

  开启:conn.setAutoCommit(false);

  提交:conn.commit

  回滚:conn.rollback

只有执行sql语句的connection才能进行事务操作

DBUtils事务

QueryRunner对象

有参构造:QueryRunner qr = new QueryRunner(DataSource dataSource);

有参构造将数据源(连接池)作为参数传入QueryRunner,QueryRunner会从连 接池中获得一个数据库连接资源操作数据库,所以直接使用无Connection参数 update方法即可操作数据库

无参构造:QueryRunner qr = new QueryRunner();

无参的构造没有将数据源(连接池)作为参数传入QueryRunner,那么我们在使 QueryRunner对象操作数据库时要使用有Connection参数的方法

事务的特性(ACID)

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

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

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

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

实例(转账)

web层

package com.oracle.web;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.oracle.service.Accountservice;

public class TransferServlet extends HttpServlet {
  private Accountservice accountservice=new Accountservice();
  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 mon=request.getParameter("money");
    double money=Double.parseDouble(mon);
    int row=accountservice.transfer(out, in, money);
    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);
  }
}

dao层

package com.oracle.dao;

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

import org.apache.commons.dbutils.QueryRunner;

import com.oracle.tools.MyDBUtils;

public class Accountdao {
  public int outt(Connection conn,String out,double money) throws SQLException{
    QueryRunner qr=new QueryRunner();
    String sql="update account set money=money-? where aname=?";
    int row=qr.update(conn,sql, money,out);
    return row;
  }
  public int inn(Connection conn,String in,double money) throws SQLException{
    QueryRunner qr=new QueryRunner();
    String sql="update account set money=money+? where aname=?";
    int row=qr.update(conn,sql, money,in);
    return row;
  }
}

posted @ 2020-11-26 15:47  ldldl  阅读(88)  评论(0)    收藏  举报