数据库连接池C3P0

小白我又来了,经历一次去大厂面试,提前进行了web两天的恶补。就想写点什么。

一直比较熟悉的就是利用servlet技术进行开发,在这过程中,虽然使用了三层模式,但是还总是发现哪里不对劲,因为在写数据库过程中,要一直不停的调用MysqlUtils类构造方法中的数据库建立链接方法。之前总看到出c3p0,今天根据自己理解讲下。

传统的数据库操作一直都是:创建数据库驱动driven;建立链接connection;传sql;查;返回结果集result。

在进行操作时,要一直进行这几步骤。要不停的与数据库建立连接。所以,上千万同时访问数据库时,容易使数据库崩溃,造成内存溢出。连接池的作用是充当一个缓冲的作用,你可以预先设定连接池的大小,和它的最大连接数。当需要建立连接时候从里面取,用完放回。

有两种方式:


public class C3P0 {
    /**
     * 手动配置
     */
    @Test
    public void demo() {
        Connection conn = null;
        PreparedStatement pre = null;
        ResultSet res = null;
        
        try {
            // 创建连接池
            ComboPooledDataSource cp = new ComboPooledDataSource();
            // 设置参数
            cp.setJdbcUrl("jdbc:mysql://localhost:3306/lesson?characterEncoding=utf-8");
            cp.setUser("root");
            cp.setPassword("123456");
            // 设置最大连接数
            cp.setMaxPoolSize(20);
            // 设置初始化连接池中中有多少连接
            cp.setInitialPoolSize(3);

//连接数据库连接池
            conn = cp.getConnection();

//写SQL
            String sql = "select * from course";
            pre = conn.prepareStatement(sql);
            res = pre.executeQuery();
            while(res.next()) {
                int id = res.getInt("cid");
                String name = res.getString("cname");
                String category = res.getString("cteacher");
              
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally {
            C3P0.cleans(conn, pre, res);
        }
    }

方法二:

利用xml,放在src下,C3P0包会自动加载c3p0-config.xml

<c3p0-config>
 
  <default-config>
    <property name="jdbcUrl">
       jdbc:mysql://localhost:3306/lesson?characterEncoding=utf-8
    </property>
    <property name="user">root</property>
    <property name="password">123456</property>

<!-- 池参数配置 -->
        <property name="acquireIncrement">3</property>
        <property name="initialPoolSize">10</property>
        <property name="minPoolSize">2</property>
        <property name="maxPoolSize">10</property>
 
  </default-config>

public class C3P0{
    /**
     * 配置文件的方式
     */
    @Test
    public void demo() {
        Connection conn = null;
        PreparedStatement pre = null;
        ResultSet res = null;
        
        try {
            // 获得连接
            ComboPooledDataSource cp = new ComboPooledDataSource();
            conn = cp.getConnection();
            String sql = "select * from course";
            pre = conn.prepareStatement(sql);
            res = pre.executeQuery();
            while(res.next()) {
                int id = res.getInt("cid");
                String name = res.getString("cname");
                String category = res.getString("cteacher");
               
            }
        } catch (Exception e) {
        
        } finally {
            C3P0.cleans(conn, pre, res);
        }
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值