栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

1 连接池(缓冲池)学习总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

1 连接池(缓冲池)学习总结

1 连接池(缓冲池)
连接池:可以称为物理数据源,代替了driverManager,通过德鲁伊获取固定的、可重用的、具有一定对象的池子。
连接池提供一些配置参数。
好处:
1)连接池的归还机制提高资源的利用率。
2)重复利用
3)避免资源浪费。
数据库连接池---c3p0/dbcp/druid等,只是提供这个缓冲池,必须要提供与之相对应的jar包。
2 Apache的Dbutils的代码演示
代码演示:
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

// 1 导包
//    druid-1.1.10.jar
//    mysql-connector-java-8.0.23.jar
//    commons-dbutils-1.7.jar
//    配置文件 :druidJdbc.properties
//        driverClassName=com.mysql.cj.jdbc.Driver
//        url=jdbc:mysql://localhost:3306/employee?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
//        username=root    和原始的Jdbc的不同user-->username
//        password=123456
//        initialSize=5   连接池初始化时初始化的数据库连接数
//        maxActive=10   连接池的最大连接数据库数,如果设为0则认为不限制数量
//        maxWait=3000  当前连接数量超过了最大连接数量,等待三秒钟后,则产生异常。
//
public class DruidJdbcUtils {
    //线程 存储Connection:模拟线程
    private static ThreadLocalt1 = new ThreadLocal<>() ;
    private static DataSource ds ;//将DataSource定义为成员变量,方便获取数据源。
    static {//加载druid配置文件
        try {
            Properties prop = new Properties() ;
            InputStream inputStream = DruidJdbcUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            //加载属性列表
            prop.load(inputStream);
            //创建数据源对象
            ds = DruidDataSourceFactory.createDataSource(prop) ;
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //定义静态方法,获取数据源
    public static DataSource getDataSource(){
        return ds ;
    }
    public static Connection getConnection(){
        Connection cont = null ;
        try {
             cont = t1.get();
            if (cont == null){
                cont = ds.getConnection() ;//从线程池中获取连接对象
                t1.set(cont);//绑定当前线程上。
            }
            return cont ;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null ;
    }
    //释放资源 ResultSet、PreparedStatement、Connection
    public static void close(ResultSet rs, PreparedStatement stmt, Connection conn){

        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    // 将释放资源也可以封装到功能中
    //针对的是DDL/DML语句操作时释放资源
    public static void close(PreparedStatement stmt, Connection conn){
        close(null,stmt,conn);
    }
    //之后用到事物,封装事物的代码和开启代码
    public static  void startStransaction()throws SQLException{
        Connection connection = ds.getConnection() ;
        connection.setAutoCommit(false);
        connection.close();
        t1.remove();
    }
    //事物回滚
    public static void rollBackAndClose()throws SQLException{
        Connection connection = ds.getConnection();
        connection.rollback();
        connection.close();
        t1.remove();
    }
    //提交事务
    public static void commitAndClose()throws SQLException{
        Connection connection = ds.getConnection();
        connection.commit();
        connection.close();
        t1.remove();
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/459499.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号