mysql常用的数据库连接池及用法

  • Post author:
  • Post category:mysql




一.什么是数据连接池


1.什么是连接池 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们 采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交 给了连接池.

2.连接池的好处 用池来管理Connection,这样可以重复使用Connection。 当使用完Connection后,调用Connection的 close()方法也不会真的关闭Connection,而是把Connection“归还”给池。



二.常见的数据库连接池有哪些?


Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。 这样应用程序可以方便的切换不同厂商的连接池! 常见的连接池有

DBCP连接池, C3P0连接池, Druid连接池


.



三.DBCP连接池的用法



1.DBCP连接池

DBCP也是一个开源的连接池,是Apache成员之一,在企业开发中也比较常见,tomcat内置的连接池。

  1. 需要在项目

    添加文件夹放入jar包,然后再idea添加依赖,

    就可以使用了。(末尾提供jar包和配置的云盘地址)

2.在src目录下新建utils包,然后编写DBCP帮助类。

package utils;

IMPORT org.apache.commons.dbcp.BasicDataSource;

IMPORT java.sql.Connection;

IMPORT java.sql.ResultSet;

IMPORT java.sql.SQLException;

IMPORT java.sql.Statement;

public class DBCPUtils {

//1.定义常量 保存数据库连接的相关信息

public static final STRING DRIVERNAME = “com.mysql.jdbc.Driver”;

//填写自己电脑的

public static final STRING URL = “jdbc:mysql://localhost:3306/test01?characterEncoding=UTF-8”;

//填写自己电脑的

public static final STRING USERNAME = “root”;

//填写自己电脑的

public static final STRING PASSWORD = “123456”;

//2.创建连接池对象 (有DBCP提供的实现类)

public static BasicDataSource dataSource = NEW BasicDataSource();

//3.使用静态代码块进行配置

static{

dataSource.setDriverClassName(DRIVERNAME);

dataSource.setUrl(URL);

dataSource.setUsername(USERNAME);

dataSource.setPassword(PASSWORD);

dataSource.setMaxActive(20);

}

//4.获取连接的方法

public static CONNECTION getConnection() throws SQLEXCEPTION {

//从连接池中获取连接

CONNECTION CONNECTION = dataSource.getConnection();

RETURN CONNECTION;

}

//5.释放资源方法

public static void CLOSE(CONNECTION con, Statement statement){

IF(con != NULL && statement != NULL){

try {

statement.close();

//归还连接

con.close();

} catch (SQLEXCEPTION e) {

e.printStackTrace();

}

}

}

public static void CLOSE(CONNECTION con, Statement statement, ResultSet resultSet){

IF(con != NULL && statement != NULL && resultSet != NULL){

try {

resultSet.close();

statement.close();

//归还连接

con.close();

} catch (SQLEXCEPTION e) {

e.printStackTrace();

}

}

}

}

3.在src 新建一个test包,之后在包下,新建一个TestDBCP类。

package test;

import utils.DBCPUtils;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class TestDBCP {

/*

* 测试DBCP连接池

* */

public static void main(String[] args) throws SQLException {

//1.从DBCP连接池中拿到连接

Connection con = DBCPUtils.getConnection();

//2.获取Statement对象

Statement statement = con.createStatement();

//3.查询所有员工的姓名

String sql = “select ename from employee”;

ResultSet resultSet = statement.executeQuery(sql);

//4.处理结果集

while(resultSet.next()){

String ename = resultSet.getString(“ename”);

System.out.println(“员工姓名: ” + ename);

}

//5.释放资源

DBCPUtils.close(con,statement,resultSet);

}

}



四.C3P0连接池用法


  1. C3P0是一个开源的JDBC连接池,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、 Spring等。

2.需要在项目需要

添加配置文件。然后在添加jar包,添加完jar包,为jar包添加依赖,

就可以使用了。(末尾提供jar包和配置的云盘地址)

3.在src目录下新建utils包,然后编写C3P0帮助类。

package utils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class C3P0Utils {

//1.创建连接池对象 C3P0对DataSource接口的实现类

//使用的配置是 配置文件中的默认配置

//public static ComboPooledDataSource dataSource = new ComboPooledDataSource();

//使用指定的配置

public static ComboPooledDataSource dataSource = new ComboPooledDataSource(“mysql”);

//获取连接的方法

public static Connection getConnection() throws SQLException {

return dataSource.getConnection();

}

//释放资源

public static void close(Connection con, Statement statement){

if(con != null && statement != null){

try {

statement.close();

//归还连接

con.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

public static void close(Connection con, Statement statement, ResultSet resultSet){

if(con != null && statement != null && resultSet != null){

try {

resultSet.close();

statement.close();

//归还连接

con.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

4.配置文件

<c3p0-config>

<!–默认配置–>

<default-config>

<!– initialPoolSize:初始化时获取三个连接,

取值应在minPoolSize与maxPoolSize之间。 –>

<property name=”initialPoolSize”>3</property>

<!– maxIdleTime:最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。–>

<property name=”maxIdleTime”>60</property>

<!– maxPoolSize:连接池中保留的最大连接数 –>

<property name=”maxPoolSize”>100</property>

<!– minPoolSize: 连接池中保留的最小连接数 –>

<property name=”minPoolSize”>10</property>

</default-config>

<!–配置连接池mysql可填写自己电脑对应的–>

<named-config name=”mysql”>

<property name=”driverClass”>com.mysql.jdbc.Driver</property>

<property name=”jdbcUrl”>jdbc:mysql://localhost:3306/test01?characterEncoding=UTF-8</property>

<property name=”user”>root</property>

<property name=”password”>123456</property>

<property name=”initialPoolSize”>10</property>

<property name=”maxIdleTime”>30</property>

<property name=”maxPoolSize”>100</property>

<property name=”minPoolSize”>10</property>

</named-config>

<!–配置连接池2,可以配置多个–>

</c3p0-config>

5.在src 新建一个test包,之后在包下,新建一个TestD3P0类。

package test;

import  utils.C3P0Utils;

import java.sql.*;

public class TestC3P0 {

//需求 查询姓名为李白的 记录

public static void main(String[] args) throws SQLException {

//1.获取连接

Connection con = C3P0Utils.getConnection();

//2.获取预处理对象

String sql = “select * from employee where ename = ?”;

PreparedStatement ps = con.prepareStatement(sql);

//3.设置占位符的值

ps.setString(1,”李白”);

ResultSet resultSet = ps.executeQuery();

//4.处理结果集

while(resultSet.next()){

int eid = resultSet.getInt(“eid”);

String ename = resultSet.getString(“ename”);

int age = resultSet.getInt(“age”);

String sex = resultSet.getString(“sex”);

double salary = resultSet.getDouble(“salary”);

Date date = resultSet.getDate(“empdate”);

System.out.println(eid +” ” + ename + ” ” + age +” ” + sex +” ” + salary +” ” +date);

}

//5.释放资源

C3P0Utils.close(con,ps,resultSet);

}

}



五.Druid连接池


  1. Druid(德鲁伊)是阿里巴巴开发的号称为监控而生的数据库连接池,Druid是目前最好的数据库连接池。在功 能、性能、扩展性方面,都超过其他数据库连接池,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况。
  2. 导入jar包和配置文件(末尾提供jar包和配置的云盘地址)

3.配置文件,可以根据自己电脑,进行配置.

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql://127.0.0.1:3306/test01?characterEncoding=UTF-8

username=root

password=123456

initialSize=5

maxActive=10

maxWait=3000

4.在src目录下新建utils包,然后编写C3P0帮助类。

package utils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class C3P0Utils {

//1.创建连接池对象 C3P0对DataSource接口的实现类

//使用的配置是 配置文件中的默认配置

//public static ComboPooledDataSource dataSource = new ComboPooledDataSource();

//使用指定的配置

public static ComboPooledDataSource dataSource = new ComboPooledDataSource(“mysql”);

//获取连接的方法

public static Connection getConnection() throws SQLException {

return dataSource.getConnection();

}

//释放资源

public static void close(Connection con, Statement statement){

if(con != null && statement != null){

try {

statement.close();

//归还连接

con.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

public static void close(Connection con, Statement statement, ResultSet resultSet){

if(con != null && statement != null && resultSet != null){

try {

resultSet.close();

statement.close();

//归还连接

con.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

5.在src 新建一个test包,之后在包下,新建一个TestDruid类。

package test;

import com.lagou.utils.DruidUtils;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class TestDruid {

// 需求 查询 薪资在3000 到 5000之间的员工的姓名

public static void main(String[] args) throws SQLException {

//1.获取连接

Connection con = DruidUtils.getConnection();

//2.获取Statement对象

Statement statement = con.createStatement();

//3.执行查询

ResultSet resultSet = statement.executeQuery(“select ename from employee where salary between 3000 and 5000”);

//4.处理结果集

while(resultSet.next()){

String ename = resultSet.getString(“ename”);

System.out.println(ename);

}

//5.释放资源

DruidUtils.close(con,statement,resultSet);

}

}


本项目需要的jar包和配置文件


云盘地址:https://pan.baidu.com/s/1JIIMrfIn1W4ER2wtZuE0EA


提取码:hhxy

注释:搞不定的可与博主交流




版权声明:本文为illovesoftware原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。