Javaweb学习笔记(JDBC处理事务与数据库连接池)
JDBC处理事务
在数据库操作中,一项事务是由一条或多条操作数据的SQL语句组成的一个不可分割的工作单元。针对JDBC处理事务的操作在Connection接口中,提供了3个相关的方法。具体如下:
(1)setAutoCommit(Boolean autoCommit):设置是否自动提交事务
(2)commit():提交事务
(3)rollback():撤销事务
默认情况下,事务是自动提交的。
案例:
(1)首先创建一个chapter02数据库,并在该数据库下创建名为accout的表,向表中插入若干数据
CREATE TABLE account(id int primary key auto_increment,
name varchar(40),
money float)
character set utf8 collate utf8_general_ci;
insert into account(name,money)values('aaa',1000);
insert into account(name,money)values('bbb',1000);
insert into account(name,money)values('ccc',1000);
(2)新建工程chapter02,新建一个类,该类用于模拟两个账号之间的转账业务。
package cn.itcast.jdbc.example;
import java.sql.*;
import cn.itcast.jdbc.example.utils.*;
public class Example08 {
public static void main(String[] args){
String outAccount="aaa";
String inAccount="bbb";
int amount=200;
Connection conn=null;
PreparedStatement pstmt1=null;
PreparedStatement pstmt2=null;
try{
conn=JDBCUtils.getConnection();
//关闭事务自动提交
conn.setAutoCommit(false);
String sql="update account set money=money-? where"
+" name=? and money>=?";
pstmt1=conn.prepareStatement(sql);
pstmt1.setDouble(1, amount);
pstmt1.setString(2, outAccount);
pstmt1.setDouble(3, amount);
pstmt1.executeLargeUpdate();
String sql2="update account set money=money+? where"
+" name=?";
pstmt2=conn.prepareStatement(sql2);
pstmt2.setDouble(1, amount);
pstmt2.setString(2, inAccount);
pstmt2.executeLargeUpdate();
conn.commit();
System.out.println("转账成功");
}catch(Exception e){
try{
conn.rollback();
System.out.println("转账失败");
}catch(SQLException e1){
e1.printStackTrace();
}
}finally{
if(pstmt1!=null){
try{
pstmt1.close();
}catch(SQLException e){
e.printStackTrace();
}
pstmt1=n