c3p0连接池的使用

c3p0连接池的使用

为什么需要使用连接池

在Java学习的初期,当我们需要连接数据库时,往往选择使用jdbc进行连接数据库,但jdbc不能跟数据库保持长时间的连接,只能保持非常短的时间(几百毫秒)。因此如果我们使用jdbc进行数据库连接时,那么程序在运行过程中就会频繁跟数据库建立连接,而且数据库的连接十分耗时,往往都超过了对数据更新、修改、查询的时间,因此我们需要运行连接池来去除这一弊端。

连接池原理

连接池会根据你配置的xml文件初始化多个数据库连接,长时间未使用的连接过期后会自动再建立。当你的程序需要进行数据库连接时,就会从连接池中取出一个空闲连接(仅仅耗时十几毫秒),这样就大大减少了对数据库进行连接的频率,同时提高了程序的运行效率。

连接池使用准备

1、c3p0-config.xml 文件的准备(文件名必须是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/student?serverTimezone=UTC</property>
        <property name="user">root</property>
        <property name="password">root</property>

        <property name="initialPoolSize">5</property>
        <property name="maxPoolSize">10</property>
        <property name="checkoutTimeout">3000</property>
    </default-config>

    <named-config name="otherc3p0">
    </named-config>
</c3p0-config>

复制使用时记得修改数据库的用户名和密码,并将此文件放在src的目录下。

在这里插入图片描述
2、导入jar包。
c3p0-0.9.5.2.jar
mchange-commons-java-0.2.11.jar
mysql-connector-java-8.0.19.jar
commons-dbutils-1.6.jar
链接:https://pan.baidu.com/s/1aWM7MWkTYhMU4PeqChGRdg
提取码:j8wm

3、连接池的使用

public void contextInitialized(ServletContextEvent sce) {
  /* This method is called when the servlet context is
     initialized(when the Web application is deployed). 
     You can initialize servlet context related data here.
  */
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {

        @Override
        public void run() {
            try {
                ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
                QueryRunner queryRunner = new QueryRunner(comboPooledDataSource);
                String sql = "select * from product";

                List<Product> productList = queryRunner.query(sql, new BeanListHandler<Product>(Product.class));
                //对象的变量名必须要和数据库中要查询的表项名一致
                System.out.println(productList);
                if (productList != null && productList.size() > 0) {
                    for (Product product : productList) {
                        if (product.getC_id() == 1) {
                            double price = product.getP_Price();
                            price = price - 100;
                            System.out.println(product.getP_Name() + "打折促销啦!现在只需" + price);
                        } else {
                            double price = product.getP_Price();
                            price=price-10;
                            System.out.println(product.getP_Name()+"打折促销啦!现在只需"+price);


                        }
                    }
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }, new Date(), 1000*3);
}

结果:

[promotiom.Product@6a824460, promotiom.Product@541cde92, promotiom.Product@7d33f20f, promotiom.Product@6bc92dce, promotiom.Product@1310d593]
小米8打折促销啦!现在只需1899.0
iPhone8打折促销啦!现在只需5299.0
vivoX23打折促销啦!现在只需3899.0
牛奶打折促销啦!现在只需39.0
牙膏打折促销啦!现在只需9.0

附加:如有误,望指正。谢谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值