事务
概念
一件事情有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;
}
}

浙公网安备 33010602011771号