数据库连接池(C3P0、Druid的使用)java

数据库连接池

项目中肯定会使用数据库连接池

项目中一般使用druid

C3P0

基本用法

package com.qfedu.c3p0;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class App {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
//		test1();
		test2();
	}
	
	public static void test1() throws Exception {
		// 创建c3p0的数据库池连接对象
		ComboPooledDataSource dataSource = new ComboPooledDataSource();
		// 配置
		dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
		dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/db2210?serverTimezone=Asia/Shanghai&useSSL=false");
		dataSource.setUser("root");
		dataSource.setPassword("root");
		
		// 初始连接数
		dataSource.setInitialPoolSize(3);
		// 最大连接数
		dataSource.setMaxPoolSize(10);
		// 最大空闲时间,单位毫秒
		dataSource.setMaxIdleTime(2000);
		
		// 通过连接池获取连接对象
		Connection connection = dataSource.getConnection();
		System.out.println(connection);
		
		// 将连接对象还回连接池
		connection.close();
		
	}
	
	/**
	 * 读取c3p0的配置文件
	 * 正常的url jdbc:mysql://localhost:3306/db2210?serverTimezone=Asia/Shanghai&useSSL=false
	 * &在xml中属于特殊符号,所以在xml中需要使用 实体符号 &替换
	 * <property name="jdbcUrl">jdbc:mysql://localhost:3306/db2210?serverTimezone=Asia/Shanghai&amp;userSSL=false</property>
	 * 
	 * @throws Exception
	 */
	public static void test2() throws Exception {
		// 自动读取src下的c3p0-config.xml
		// 默认加载<default-config>中的配置
		ComboPooledDataSource dataSource = new ComboPooledDataSource();
		
		// 获取连接对象
		Connection connection = dataSource.getConnection();
		System.out.println(connection);
		
		// “关闭”连接对象,将连接对象还回连接池
		connection.close();
	}

}

<?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/db2210?serverTimezone=Asia/Shanghai&amp;useSSL=false</property>
		 <property name="user">root</property>
		 <property name="password">root</property>
		 
		 <property name="initialPoolSize">3</property>
		 <property name="maxPoolSize">6</property>
		 <property name="maxIdleTime">2000</property>
	</default-config>
	
	<named-config name="myconfig">
		 <property name="driverClass">com.mysql.jdbc.Driver</property>
		 <property name="jdbcUrl">jdbc:mysql:///supermarket</property>
		 <property name="user">root</property>
		 <property name="password">root</property>
		 
		 <property name="initialPoolSize">3</property>
		 <property name="maxPoolSize">6</property>
		 <property name="maxIdleTime">2000</property>
	
	</named-config>
	
</c3p0-config>

结合DBUtils

package com.qfedu.utils;

import org.apache.commons.dbutils.QueryRunner;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Utils {
	// ComboPooledDataSource 实现 jdbc中的DataSource接口
	private static ComboPooledDataSource dataSource = null;
	// 创建连接池对象
	static {
		dataSource = new ComboPooledDataSource();
	}
	
	public static QueryRunner getQueryRunner() {
		// javax.sql.DataSource
		// QueryRunner(DataSource ds)
		// 将DBUtils和数据库连接池产生了关联
		// QueryRunner内部维护连接对象
		return new QueryRunner(dataSource);
	}
}

public static void test2() throws Exception {
		
		QueryRunner qr = C3P0Utils.getQueryRunner();
		String sql = "select count(*) from t_person";
		// QueryRunner内部维护连接对象,调用query,不需要connection参数
		// 执行完,也不需要手动关闭connection对象
		Long count = qr.query(sql, new ScalarHandler<Long>());
		System.out.println(count);
	
	}

Druid

基本用法

package com.qfedu.druid;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.qfedu.utils.DruidUtils;

public class App {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
//		test1();
		test2();
	}
	
	public static void test1() throws Exception {
		
		// 通过Properties加载properties文件中内容
		FileInputStream inputStream = new FileInputStream("src/druid.properties");
		Properties prop = new Properties();
		prop.load(inputStream);
		
		// 获取连接池对象
		// javax.sql.DataSource
		DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
		
		Connection connection = dataSource.getConnection();
		System.out.println(connection);
		
		connection.close();
		
	}
	
	public static void test2() throws Exception {
		QueryRunner queryRunner = DruidUtils.getQueryRunner();
		String sql = "select count(*) from t_person";
		Long count = queryRunner.query(sql, new ScalarHandler<Long>());
		System.out.println(count);
	}

}
# \u6587\u4EF6\u540D druid.properties \u5B58\u50A8\u5728src\u76EE\u5F55\u4E0B
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/db2210?serverTimezone=Asia/Shanghai&useSSL=true
username=root
password=root
# \u521D\u59CB\u5316\u6570\u636E\u5E93\u8FDE\u63A5\u6C60\u4E2D\u8FDE\u63A5\u4E2A\u6570
initialSize=5
# \u6700\u5927\u4E2A\u6570
maxActive=20
# TimeOut \u7B49\u5F85\u8D85\u65F6\u65F6\u95F4
maxWait=2000

结合DButils

package com.qfedu.utils;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbutils.QueryRunner;

import com.alibaba.druid.pool.DruidDataSourceFactory;

public class DruidUtils {

	private static DataSource dataSource = null;
	
	static {
		try {
			FileInputStream inputStream = new FileInputStream("src/druid.properties");
			Properties prop = new Properties();
			prop.load(inputStream);
			// 创建连接池对象
			dataSource = DruidDataSourceFactory.createDataSource(prop);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 创建QueryRunner对象,一定要注意,参数使用连接池对象
	 * @return
	 */
	public static QueryRunner getQueryRunner() {
		return new QueryRunner(dataSource);
	}
}

Web服务器

C/S Client/Server

B/S Browser/Server 浏览器/服务端

​ 借助Http协议

Http协议介绍 了解

​ 请求-响应协议

​ 浏览器端发送http请求,服务端根据请求,向浏览器端返回响应的数据

请求

​ 请求行 请求头 请求体(post)

​ 提交方式:主要get post

​ get方式将提交的数据放在url,不安全;post方式将提交的数据放在请求体中

​ get方法提交的数据大小有限制;post方式提交的数据,大小无限制

​ get方式相对快,缓存静态资源

​ get一般用于查询,post一般用于修改和添加

响应

​ 响应行 响应头 响应体

​ 响应状态:200 302 404 500

Tomcat基本介绍

更适合中小项目

使用tomcat,一定要配置 JAVA_HOME环境变量

验证:bin下面运行startup.bat ,启动tomcat服务器

​ 浏览器中 http://localhost:8080 验证是否可以正常访问

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会回答你的问题,以下是常用数据库连接池 DBCP、c3p0Druid 的配置说明: 1. DBCP (Apache Commons DBCP) DBCP 是 Apache Commons 项目中的一个子项目,它是一个纯 Java 实现的数据库连接池。DBCP 的使用非常简单,只需要引入相关的 jar 包即可。以下是 DBCP 的配置说明: ``` # 最大连接数 maxActive=100 # 最大空闲连接数 maxIdle=30 # 最小空闲连接数 minIdle=10 # 获取连接时的最大等待时间,单位为毫秒 maxWait=10000 # 是否开启自动回收空闲连接的线程 removeAbandoned=true # 回收超时时间,单位为秒 removeAbandonedTimeout=180 # 是否开启缓存 PreparedStatement,提高性能 poolPreparedStatements=true # 缓存 PreparedStatement 的最大数量 maxOpenPreparedStatements=100 ``` 2. c3p0 c3p0 是一个开源的 JDBC 数据库连接池,它实现了数据源和 JNDI 绑定,支持 JDBC3 的 Connection 和 Statement 缓存以及 JDBC4 的自动化管理。以下是 c3p0 的配置说明: ``` # 最大连接数 c3p0.maxPoolSize=100 # 最小连接数 c3p0.minPoolSize=10 # 初始化连接数 c3p0.initialPoolSize=10 # 获取连接时的最大等待时间,单位为毫秒 c3p0.checkoutTimeout=10000 # 是否自动回收超时连接 c3p0.autoCommitOnClose=true # 是否开启自动回收空闲连接的线程 c3p0.idleConnectionTestPeriod=60 # 回收超时时间,单位为秒 c3p0.maxIdleTime=1800 # 是否开启缓存 PreparedStatement,提高性能 c3p0.cachePreparedStatements=true # 缓存 PreparedStatement 的最大数量 c3p0.maxStatements=100 ``` 3. Druid Druid 是阿里巴巴开源的一个高性能、可扩展、功能强大的数据库连接池。它主要提供了以下功能:监控统计、防御 SQL 注入、批量处理、数据源加密、日志记录等。以下是 Druid 的配置说明: ``` # 最大连接数 druid.maxActive=100 # 最大空闲连接数 druid.maxIdle=30 # 最小空闲连接数 druid.minIdle=10 # 获取连接时的最大等待时间,单位为毫秒 druid.maxWait=10000 # 是否开启自动回收空闲连接的线程 druid.removeAbandoned=true # 回收超时时间,单位为秒 druid.removeAbandonedTimeout=180 # 是否开启缓存 PreparedStatement,提高性能 druid.poolPreparedStatements=true # 缓存 PreparedStatement 的最大数量 druid.maxOpenPreparedStatements=100 # 是否开启 SQL 执行监控 druid.stat=true # 是否开启防御 SQL 注入功能 druid.filters=stat,wall,log4j ``` 以上就是常用数据库连接池 DBCP、c3p0Druid 的配置说明。希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值