JDBC—连接池C3P0

版权声明:. https://blog.csdn.net/WildestDeram/article/details/89736371

连接池C3P0

连接池是创建和管理一个连接的缓冲池的技术,这些准备好被任何需要它们的线程使用。

在使用连接的时候,是程序创建了一个跟数据库连接的对象,每一次使用完只会都要进行销毁,这样会导致资源的浪费。所以我们可以创建一个连接池,在连接池中可以存放连接。需要使用连接时,可以从连接池中获取连接,用完之后可以归还给连接池

 缺点:用户每次请求都需要向数据库获得连接,而数据库创建连接通常需要消耗相对较大的资源,创建时间长。假设网站一天10w访问量,数据库服务器就需要创建10w次连接,从而造成数据库资源的浪费,并且容易造成数据库服务器内存的溢出

 C3P0连接池的核心类:ComboPooledDataSource

//img.mukewang.com/climg/5af2bd5200019cca05000457.jpg

完成如下操作:

    1、在数据库中先准备好数据

    2、使用手动配置连接池方式从course表取出所有数据并显示

    3、使用配置文件方式从course表取出所有数据并显示

扫描二维码关注公众号,回复: 6100163 查看本文章

1.利用Navicat创建表并且加载数据

2.手动配置

package JDBCJava_bean2;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import org.junit.Test;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import utils.JDBCutils;

public class JDBCdemo {
	/**
	 * 手动配置
	 */
	@Test
	public void demo() {
		Connection conn = null;
		PreparedStatement pre = null;
		ResultSet res = null;
		
		try {
			// 创建连接池
			ComboPooledDataSource sc = new ComboPooledDataSource();
			// 设置参数
			sc.setJdbcUrl("jdbc:mysql://localhost:3306/dream1?useSSL=false&serverTimezone=Hongkong&useUnicode=true&characterEncoding=utf-8");
			sc.setUser("root");
			sc.setPassword("1916");
			// 设置最大连接数
			sc.setMaxPoolSize(20);
			// 设置初始化连接池中中有多少连接
			sc.setInitialPoolSize(3);
			
			conn = sc.getConnection();
			String sql = "select * from course";
			pre = conn.prepareStatement(sql);
			res = pre.executeQuery();
			while(res.next()) {
				int id = res.getInt("id");
				String name = res.getString("name");
				String category = res.getString("category");
				String desp = res.getString("desp");
				Date time = res.getDate("createTime");
				System.out.println(id+"\t"+name+"\t"+category+"\t"+desp+"\t"+time);
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {
			JDBCutils.cleans(conn, pre, res);
		}
	}
}

3.利用xml文件进行配置,注意:xml要在src目录下

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>

  <default-config>
	<property name="jdbcUrl">
		jdbc:mysql://localhost:3306/dream1?useSSL=false&amp;serverTimezone=UTC&amp;allowPublicKeyRetrieval=true
	</property>
	<property name="user">root</property>
	<property name="password">1916</property>
  </default-config>
  
</c3p0-config>
package JDBCJava_bean2;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import org.junit.Test;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import utils.JDBCutils;

public class JDBCdemo2 {
	/**
	 * 配置文件的方式
	 */
	@Test
	public void demo() {
		Connection conn = null;
		PreparedStatement pre = null;
		ResultSet res = null;
		
		try {
			// 获得连接
			ComboPooledDataSource sc = new ComboPooledDataSource();
			conn = sc.getConnection();
			String sql = "select * from course";
			pre = conn.prepareStatement(sql);
			res = pre.executeQuery();
			while(res.next()) {
				int id = res.getInt("id");
				String name = res.getString("name");
				String category = res.getString("category");
				String desp = res.getString("desp");
				Date time = res.getDate("createTime");
				System.out.println(id+"\t"+name+"\t"+category+"\t"+desp+"\t"+time);
			}
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
			JDBCutils.cleans(conn, pre, res);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/WildestDeram/article/details/89736371