美文网首页
数据库连接池

数据库连接池

作者: 情安 | 来源:发表于2021-06-24 00:34 被阅读0次

    1.介绍

    池:就是一个容器,在内存中就是一片空间,用于存储程序中的数据。
    连接池:就是将连接对象存放在一个容器中,当需要连接时,就直接从连接池中获取一个连接进行使用,用完连接后再将连接还回连接池中。
    目的是为了减少连接创建和关闭的次数,实现连接的服用。


    传统方式操作数据库

    在传统方式中(即不使用连接池),每次需要就创建一个连接进行使用,用完连接后就将连接直接关闭。对于数据库来说,频繁的创建连接和关闭连接会非常的消耗资源,而且耗费时间,会导致程序执行效率的降低,连接也无法复用。


    使用连接池操作数据库
    可以在程序中创建一个池子,在程序一启动时,就初始化一批连接放在连接池中。当用户需要连接时,就直接从池子中拿一个连接进行使用,当连接用完后,也不要将连接关闭,而是将连接还回池中,下一个用户需要连接时也是如此。
    这样一来,用来用去都是池中的这一批连接,可以减少连接创建和关闭的次数。提高程序执行的效率,还可以实现连接的复用。

    2.三种连接池方法

    方法一:

    package JDBC.day1;
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    import org.junit.Test;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    //测试c3p0连接池
    public class Testc3p0 {
        @Test
        public void testFindAll(){
            Connection conn = null;
            Statement stat = null;
            ResultSet rs = null;
            //创建一个连接池对象(容器)
            ComboPooledDataSource pool = new ComboPooledDataSource();
            try {
                //设置连接数据库的基本信息(方法一)
    //            pool.setDriverClass("com.mysql.cj.jdbc.Driver");
    //            pool.setJdbcUrl("JDBC:mysql://localhost:3306/jt_db?serverTimezone=Asia/Shanghai&characterEncoding=utf-8");
    //            pool.setUser("root");
    //            pool.setPassword("root");
    //            conn = JdbcUtil.getConn();
                //从连接池中获取一个连接对象
                conn = pool.getConnection();
    
                stat = conn.createStatement();
                String sql = "select * from account";
                rs = stat.executeQuery(sql);
                while (rs.next()){
                    int id = rs.getInt("id");
                    String name = rs.getString("name");
                    Double money = rs.getDouble("money");
                    System.out.println(id+":"+name+":"+money);
                }
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                /*将连接还回连接池中
                *如果连接象是我们自己获取的一个连接对象,调用conn.close方法是将连接关闭还给数据库。
                *如果连接是从连接池中获取的一个连接对象,由于连接池在将连接返回之前,对连接对象进行了改造,
                *将连接对象的 close方法改造为了还连接到连接池中。因此同样是调用conn.close方法
                *将连接还回池中
                 onn.close*/
                JdbcUtil.close(rs,stat,conn);
            }
        }
    }
    

    方法二:在类目录下(开发时可以放在src或者类似的源码目录下), 添加一个c3p0-config.xml文件, 配置内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
        <default-config>
            <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/jt_db?serverTimezone=Asia/Shanghai</property>
            <property name="user">root</property>
            <property name="password">root</property>
        </default-config>
    </c3p0-config>
    

    注意: 该配置文件的位置和文件名都是固定的,将来c3p0程序底层会自动的到指定位置(src源码目录或者相似的源码目录下)寻找指定名称的文件(c3p0-config.xml)如果能够找到文件并读取文件中的配置(配置都要正确), 就能够连接上数据库,能够初始化一批连接放在连接池中, 否则将会抛出异常.

    方法三:在类目录下(开发时可以放在src或者类似的源码目录下), 添加一个名称为c3p0.properties的文件, 配置内容如下:

    c3p0.driverClass=com.mysql.cj.jdbc.Driver
    c3p0.jdbcUrl=jdbc:mysql://localhost:3306/jt_db?serverTimezone=Asia/Shanghai&characterEncoding=utf-8
    c3p0.user=root
    c3p0.password=root
    

    注意: 该配置文件的位置和文件名都是固定的,将来c3p0程序底层会自动的到指定位置(src源码目录或者相似的源码目录下)寻找指定名称的文件(c3p0.properties)如果能够找到文件并读取文件中的配置(配置都要正确), 就能够连接上数据库,能够初始化一批连接放在连接池中, 否则将会抛出异常.

    相关文章

      网友评论

          本文标题:数据库连接池

          本文链接:https://www.haomeiwen.com/subject/eygiyltx.html