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=null;
				 }
			if(pstmt2!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值