jdbc-c3p0连接池

目录

  1. 项目结构
  2. c3p0-config.xml文件配置
  3. 书写JDBCUtil工具类
  4. 数据库连接测试

项目结构

在这里插入图片描述
这里mysql的jar包和c3p0的两个jar包必须存在,否则不会成功。
c3p0的jar包大家可以去我的百度云盘下载。

c3p0-config.xml文件配置

命名必须为c3p0-config.xml。

c3p0-config.xml文件必须放在src目录下,c3p0会默认加载src目录下的c3p0-config.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<!-- 这是默认配置信息 -->
	<default-config>
		<!-- 连接四大参数配置 -->
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property><!--test为数据库名  -->
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="user">root</property> <!-- 用户名 -->
		<property name="password">root</property> <!-- 密码 -->
		<!-- 池参数配置 -->
		
		  <!-- 初始连接数 -->
		<property name="initialPoolSize">10</property>
		 <!-- 最小连接数 -->
		<property name="minPoolSize">2</property>
		 <!-- 最大连接数 -->
		<property name="maxPoolSize">10</property>
		<!-- 创建的新数据库连接数 -->
		<property name="acquireIncrement">3</property>
		 <!--  C3P0 数据库连接池可以维护的 Statement 的个数 -->  
		<property name="maxStatements">50</property>
		<!-- 超时时间 -->
		<property name="checkoutTimeout">2000</property>
	</default-config>
	

<named-config name="c3p01">
		<!-- 连接四大参数配置 -->
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property><!--test为数据库名  -->
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="user">root</property> <!-- 用户名 -->
		<property name="password">root</property> <!-- 密码 -->
		<!-- 池参数配置 -->
		
		  <!-- 初始连接数 -->
		<property name="initialPoolSize">10</property>
		 <!-- 最小连接数 -->
		<property name="minPoolSize">2</property>
		 <!-- 最大连接数 -->
		<property name="maxPoolSize">8</property>
		<!-- 创建的新数据库连接数 -->
		<property name="acquireIncrement">3</property>
		 <!--  C3P0 数据库连接池可以维护的 Statement 的个数 -->  
		<property name="maxStatements">50</property>
		<!-- 超时时间 -->
		<property name="checkoutTimeout">1000</property>
	</named-config>
	
</c3p0-config>


书写JDBCUtil工具类

package utils;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
 
public class JDBCUtil {
	private static DataSource ds = new ComboPooledDataSource();
 
// 获取连接池
	public static DataSource getDataSource() {
		return ds;
	}
 
// 获取连接
	public static Connection getConnection() throws SQLException {
		return ds.getConnection();
	}
	
//归还连接
	public static void close(ResultSet resultSet, PreparedStatement pstmt, Connection conn) {
		if (resultSet != null) {
			try {
				resultSet.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (pstmt != null) {
			try {
				pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
 
}


这里填入参数可以使用我们c3p0-config.xml中的第二个配置(可以多个),无参则使用默认配置。

private static DataSource ds = new ComboPooledDataSource("c3p01");

JDBCUtil工具类我也参考了别人,链接:https://blog.csdn.net/qq_42035966/article/details/81332343

数据库连接测试

Demo1:

package c3p0;

import java.sql.Connection;
import java.sql.SQLException;

import utils.JDBCUtil;

public class c3p0demo {
	public static void main(String[] args) throws SQLException {
		for(int i=0;i<=10;i++) {
		Connection conn =JDBCUtil.getConnection();
		System.out.println(i+":"+conn);
			if(i==3) {
				conn.close();
			}
		}
	}
}

在这里插入图片描述
出现上图最上方那些信息说明,证明我们的c3p0配置成功。

这是一个简单的测试,用来获取每一个连接的信息,其中红框圈出来的值相同,
我们以前调用close()方法是关闭了连接,而在线程池中close()方法是把使用完的连接归还给连接池以便下一个申请调用。

Demo2:

package c3p0;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import utils.JDBCUtil;

public class c3p0_select_test {
	public static void main(String[] args) throws Exception {
		Connection conn = null;
		Statement stmt = null;
		String id = null;
		String name = null;
		String sex = null;
		conn = JDBCUtil.getConnection();

		stmt = conn.createStatement();
		String sql = "select * from user";
		ResultSet rs = stmt.executeQuery(sql);
		// 表查询
		while (rs.next()) {
			id = rs.getString("id");
			name = rs.getString("username");
			sex = rs.getString("sex");

			if (id == null) {
				System.out.println("表为空!");
			} else {
				System.out.println("id = " + id + "," + "name = " + name + ", " + "sex= " + sex);
			}

		}
	}
}

在这里插入图片描述
这是一个基于c3p0的简单查表,使用JDBCUtil工具类进行c3p0的连接并测试查表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值