事务及Druid开源连接池知识点及案例

本文介绍了事务的概念及其管理API,包括如何开启、提交和回滚事务。接着讲解了连接池的重要性,特别是Druid和C3P0两个开源连接池的概述。此外,还探讨了DBUtils工具类的作用和使用,以及如何在不同场景下实现增删改查操作。通过示例代码展示了如何在JDBC中进行事务管理和连接池的实战应用。
摘要由CSDN通过智能技术生成

第一部分:今日技术操作及其概述

注意:1.配置文件,如.properties 和今天的c3p0-config.xml在src下
2.如果是jar包,在项目下创建一个文件夹,复制在文件夹中
3.在用提供的第三方配置文件时,列如成c3p0-config.xml时,要记得点击c3p0-config.xml,把里面的数据库名称和密码改成自己的
4.增删改查构造方法的上面必须要加上@Test

1.事务的概念
*事务指的是逻辑上的一组操作,组成这组操作各个逻辑单元要么全都成功,要么全都失败。

2.事务管理API
*开启事务 conn.setAutoCommit(false); 【是否自动提交,为false】
*提交事务 conn.commit(); 【自动提交为false,我们手动提交】
*回滚事务 try { 【如果发生异常用回滚,在回滚中如果发生异常就try catch】
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}

3.什么是连接池
*连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用
*补充: 连接池是装有连接的容器,使用连接的话,可以从连接池中进行获取,使用完成之后将连接归还给连接池。

4.为什么要学习连接池
*连接对象创建和销毁是需要耗费时间的,在服务器初始化的时候就初始化一些连接。把这些连接放入到内存中,
使用的时候可以从内存中获取,使用完成之后将连接放入连接池中。从内存中获取和归还的效率要远远高于创建和销毁的效率。(提升性能)。

5.Druid开源连接池的概述
*Druid是阿里旗下开源连接池产品,使用非常简单,可以与Spring框架进行快速整合。

在配置文件中可以写:
#<!-- 初始化连接 -->
initialSize=10

#最大连接数量
maxActive=50

#<!-- 最大空闲连接 -->
maxIdle=20

#<!-- 最小空闲连接 -->
minIdle=5

6.C3P0开源连接池的概述
*C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它们的开源项目有Hibernate,Spring等

7.什么是DBUtils
*Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,
同时也不会影响程序的性能

8.为什么要学习DBUtils
*因为JDBC手写比较麻烦,而且有非常多的代码是类似的。比如获得连接,预编译SQL,释放资源等..那么可以将这些代码抽取出来放到工具类中。
将类似的代码进行抽取。大大简化JDBC的编程。

9.DBUtils的API概述
*QueryRunner对象 核心运行类

第二部分:代码实现==========

1.在转帐的代码中添加事务管理
[1]package JDBCaccount;

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

import org.junit.Test;

public class account {
@Test
public void demo(){
Connection conn = null;
PreparedStatement pst = null;
try{

        //完成数据库的连接
        conn = JDBC工具类.get();
        //开启事务
        conn.setAutoCommit(false);             【是否自动提交,为false】

        //获取执行者对象
        String sql = "update account set money=money+? where name=?";
        pst = conn.prepareStatement(sql);
        //给占位符设置参数
        //给aaa减1000元
        pst.setDouble(1, -1000);
        pst.setString(2, "aaa");
        pst.executeUpdate();

        int i = 1 / 0; --------------这里会出现异常,出现异常就不会向下执行,如果没有事务管理三步骤,那么账户的钱aaa会减1000,而bbb不会加1000,这是不可以的,
                                     如果此处有异常,就直接执行下面catch语句中回滚,转账就停止,之前被扣的钱就重新还给用户
        //给bbb加1000元             
        pst.setDouble(1, 1000);
        pst.setString(2, "bbb");
        pst.executeUpdate();
        //提交事务
        conn.commit();            【自动提交为false,我们手动提交】
    }catch(Exception e){
        // 回滚事务: 【如果发生异常用回滚,在回滚中如果发生异常就try catch】
        try {
            conn.rollback();
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
        e.printStackTrace();
    }finally{
        JDBC工具类.method(conn, pst);
    }
}

}

[2] 配置文件
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/zhanghu?reWriteBacthedStatements=true
username=root
password=0000

2.C3P0开源连接池工具类和其增删改查
[1]C3P0工具类
package C3P0开源连接池练习;

import java

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值