上一期我写了一篇Druid连接池的基本配置与使用,今天我要介绍一下C3P0连接池的基本使用。因为是介绍基本使用,所以我打算用一个非常简单的java应用来教大家如何对C3P0连接池进行基本配和使用。所以你只要有jdbc和Java基础就能看懂这篇文章,并学会如何使用。
一.C3P0连接池简介
C3P0连接池也是一款开源的连接池,它与阿里巴巴的Druid的使用方法都差不多。不同之处在于Driud连接池的数据库配置是写在druid-config.properties的属性配置文件中,而C3P0连接池把数据库配置写在c3p0-config.xml的xml文件中。注意,这两个配置文件的文件名都写死了,不能乱改为其他名字。
二.C3P0连接池的使用步骤
1.创建一个普通的java项目,然后在项目文件夹下新建一个lib文件夹,用于存放我们要用到的第三方jar包。项目如下结构:(哈哈,是不是太细了)
2.然后下载我们需要用到的jar包,需要用到mysql的jdbc驱动,c3p0-0.9.5.5.jar和mchange-commons-java.jar。
可以百度c3p0,然后进入mchange.com找到下载链接下载jar包。也可以用maven导入所需要的jar包。如果你不会下载可以私信找我要,我发给你。或者教你如何下载。
下面导入好jar包后,把jar包到到模块中就开始操作和使用了。
3.在src目录下创建一个c3p0-config.xml文件,然后进行如下配置。注意,xml中要对特殊符号进行转义。
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-config> <!--jdbc驱动类--> <property name="driverClass">com.mysql.cj.jdbc.Driver</property> <!--连接字符串--> <property name="jdbcUrl">jdbc:mysql://localhost:3306/files</property> <!--数据库用户名--> <property name="user">root</property> <!--数据库的密码--> <property name="password">zc20020106</property> <!--初始化创建的连接数量--> <property name="initialPoolSize">10</property> <!--最大的连接数量--> <property name="maxPoolSize">20</property> </default-config> </c3p0-config>
4.在main.java里面编写使用代码。
package com.company; import com.mchange.v2.c3p0.ComboPooledDataSource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Main { public static void main(String[] args) { //1.加载配置文件 // 2.创建DataSource //这里两步直接合为了一步写,非常方便。 DataSource dataSource=new ComboPooledDataSource(); //3.得到数据库连接 Connection conn=null; PreparedStatement ps=null; ResultSet rs=null; try { conn=dataSource.getConnection(); //4.后面的用法就是jdbc的用法了 String sql="select id from myfile"; ps=conn.prepareStatement(sql); rs=ps.executeQuery(); while (rs.next()){ System.out.println(rs.getInt("id")); } } catch (SQLException e) { e.printStackTrace(); }finally { //不要忘记finally来释放资源 //但是这里使用连接池关闭和不使用连接池关闭有所不同, // 使用连接池conn.close()是将连接回收到连接池中, // 不使用连接池conn.close()关闭则直接释放连接 if (conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if (ps!=null){ try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if (rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }
这里conn获取的数据库连接是连接池在程序启动时创建好的连接,直接就能被获取拿来用,用完close()后,该连接又会回收到连接池中,等待下一次被调用。使用起来非常简单吧。