eclipse进行C3P0和DBCP数据库连接池的运用(mysql8.0.16+eclipse2021-09)

eclipse进行C3P0和DBCP数据库连接池的运用

前期准备

在开始之前要创建好数据库我这边建好的数据库如下图所示:在这里插入图片描述

在这里插入图片描述

一、DBCP数据连接池的应用

  1. 上官网下载dbcp、pool网站为:http://commons.apache.org/proper/在这里插入图片描述
  2. 下载完后在eclipse创建web项目进行jar包导入
    在这里插入图片描述
  3. 编写DBCP的配置文件,文件名一定要为:dbcpconfig.properties;并且要在src包下面具体创建方法如下:点击src包(注意这里是src的根包,而不是src下面创建的包)然后在目录那边选择file-new-file到这个界面:
    在这里插入图片描述
    我这里不能点击是因为,我已经创建好一个dbcpconfig.properties所以不能在继续创建了。
  4. 创建好后进行编写代码
#连接设置
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
username=root(个人数据库用户)
password=个人数据库密码
#<!-- 初始化连接 -->
initialSize=10
#最大连接数量
maxActive=50
#<!-- 最大空闲连接 -->
maxIdle=20
#<!-- 最小空闲连接 -->
minIdle=5
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制
maxWait=1000

实际上编写进入后是看不到中文字符的
在这里插入图片描述

  1. 注意这里得driverClassName=com.mysql.cj.jdbc.Driver是mysql8.0的写法和以前的版本com.mysql.jdbc.Driver的区别是多了一个cj。
  2. 创建一个名称为DBCPUtils的工具类,其代码如下所示。
import java.sql.*;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSourceFactory;
public class DBCPUtils {
    private static DataSource ds;//定义一个连接池对象
    static{
        try {
            Properties pro = new Properties();
            pro.load(DBCPUtils.class.getClassLoader()
            		    .getResourceAsStream("dbcpconfig.properties"));
            //得到一个连接池对象
            ds = BasicDataSourceFactory.createDataSource(pro);
        } catch (Exception e) {
            throw new ExceptionInInitializerError("初始化连接错误,请检查配置文件!");
        }
    }
    //从池中获取一个连接
    public static Connection getConnection() throws SQLException{
        return ds.getConnection();
    }
    public static void closeConn(Connection conn){    
        if(conn!=null){
            try {
                conn.close();//关闭
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
  1. 创建一个测试类DBCPTest,在其main方法中测试获取数据连接。其测试类的代码如下:
import java.sql.Connection;
import java.sql.SQLException;

import cn.wbl.jdbc.utils.DBCPUtils;
public class DBCPTest {
	public static void main(String[] args) throws SQLException {
		//输出连接信息
		System.out.println(DBCPUtils.getConnection());
		long begin = System.currentTimeMillis();
		for (int i = 0; i < 10000; i++) {
			Connection conn = DBCPUtils.getConnection();
			DBCPUtils.closeConn(conn);
		}
		long end = System.currentTimeMillis();
		System.out.println("用时:" + (end - begin));
	}
}
  1. 当运行后出现这样的问题:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
	at org.apache.commons.dbcp2.BasicDataSourceFactory.<clinit>(BasicDataSourceFactory.java:60)
	at cn.wbl.jdbc.utils.DBCPUtils.<clinit>(DBCPUtils.java:17)
	at cn.wbl.jabc.Lianxi.example.DBCPTest.main(DBCPTest.java:9)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	... 3 more

这就需要上这个网站:http://commons.apache.org/proper/commons-logging/download_logging.cgi;下载Apache Commons Logging 1.2,下载后将包导入

  1. 再次运行后结果如下:在这里插入图片描述

二、C3P0的数据连接池的应用

  1. 上C3P0下在C3P0的jar包网站为:https://sourceforge.net/projects/c3p0/,我这里下载的是c3p0-0.9.5.5.jar,下载好后将jar包导入项目当中
  2. 编写C3P0的配置文件,文件名一定要为: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/jdbc?useSSL=false&amp;serverTimezone=UTC</property>
		<property name="user">root(个人数据库用户)</property>
		<property name="password">个人数据库密码</property>
		<property name="checkoutTimeout">30000</property>
		<property name="initialPoolSize">10</property>
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">100</property>
		<property name="minPoolSize">10</property>
		<property name="maxStatements">200</property>
	</default-config>
	<named-config name="itcast">
		<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
		<property name="jdbcUrl">
           	jdbc:mysql://localhost:3306/jdbc?useSSL=false&amp;serverTimezone=UTC
        </property>
		<property name="user">root</property>
		<property name="password">990411wbl</property>
		<property name="initialPoolSize">5</property>
		<property name="maxPoolSize">15</property>
	</named-config>
</c3p0-config>

  1. 创建一个名称为C3p0Test的类,其代码如下所示
import java.sql.*;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3p0Test {
	public static DataSource ds = null;
	// 初始化C3P0数据源
	static {
		// 使用c3p0-config.xml配置文件中的named-config节点中name属性的值
		ComboPooledDataSource cpds = new ComboPooledDataSource("itcast");
		ds = cpds;
	}
	public static void main(String[] args) {
		Connection conn = null;
		PreparedStatement prestmt = null;
		ResultSet rs = null;
		try {
			conn = ds.getConnection();
			String sql = "select * from user";
			prestmt = conn.prepareStatement(sql);
			rs = prestmt.executeQuery();
			while (rs.next()) {
				System.out.print(rs.getInt("id") + "    \t");
				System.out.print(rs.getString("name") + "    \t");
				System.out.print(rs.getString("password") + "    \t");
				System.out.println();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				rs = null;
			}
			if (prestmt != null) {
				try {
					prestmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				prestmt = null;
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				conn = null;
			}
		}
	}
}

4.运行出现弹窗:在这里插入图片描述
错误代码显示如下:
Exception in thread "main" java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector at cn.wbl.jabc.Lianxi.example.C3p0Test.<clinit>(C3p0Test.java:13) Caused by: java.lang.ClassNotFoundException: com.mchange.v2.ser.Indirector at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 1 more

这是因为在C3P0里面哈需要导入一个jar包
在这里插入图片描述
将这一jar包导入项目后就可以解决这一问题。
5. 重新运行结果如下:在这里插入图片描述

三、结言

1、本文所需要的jar包我也以上传,各位看官有需要的可自取:
CSDN资源:https://download.csdn.net/download/wbl9904/43651307
百度网盘:https://pan.baidu.com/s/1pOf4NEqttk4MlCg_oOvZtQ
提取码:9904
2、如果有写错的请指出来,大家相互进步!谢谢啦!编程之路学无止境!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华丽转场

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值