Java-C3P0和Druid连接池的运用
1.概念
- 其实就是一个容器(集合),存放数据库连接的容器
- 当系统初始化好后,容器被创建,容器会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。
- 好处:节约资源,用户访问高效
2.实现:
2.1 标准接口:DataSource javax.aql包下的
- 方法:
- 获取连接:getConnextion()
- 归还连接:如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭数据库了。而是归还连接
- 一般我们不去实现它,有数据库厂商实现
2.2 C3P0:数据库连接池技术
步骤
- 导入jar包(两个) c3p0-0.9.5.2 mchange-commons-java-0.2.12 mysql-connector-java-5.1.38
- 不要忘记导入数据库的驱动架包
- 定义配置文件:
- 名称:c3p0.propertie或者c3p0-config.xml
- 路径:直接将文件放在src目录下即可
- 创建核心对象 数据库连接池对象 ComboPooledDataSource
- 获取连接:getConnection
配置文件
<?xml version="1.0" encoding="utf-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/db3</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">10</property>
<property name="checkoutTimeout">3000</property>
</default-config>
<named-config name="otherc3p0">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/db3</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">8</property>
<property name="checkoutTimeout">3000</property>
</named-config>
</c3p0-config>
代码如下
package cn.itcast.datasource.c3p0;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class C3P0Demo1 {
public static void main(String[] args){
//创建数据库连接池对象
DataSource dataSource=new ComboPooledDataSource();
//获取连接对象
try {
Connection connection=dataSource.getConnection();
System.out.println(connection);
} catch (SQLException e) {
e.printStackTrace();
}
//打印
}
}
2.3 Druid:数据库连接池技术,由阿里巴巴提供
步骤
1.导入jar包 druid-1.0.9
2.定义配置文件
* 是properties形式的
* 可以叫任意名称,可以放在任意目录下
3.加载配置文件,Properties
4.获取数据库连接池对象:通过工厂类来获取 DruidDataSourceFactory
5.获取连接:getConnection
配置文件
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db3?useUnicode=true&characterEncoding=utf-8&characterSetResults=utf-8
username=root
password=123456
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000
# maxIdle=10
minIdle=3
代码如下
package cn.itcast.datasource.druid;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
public class DruidDemo {
public static void main(String[] args) throws Exception {
//导入jar包
//定义配置文件
//加载配置文件
Properties properties=new Properties();
InputStream inputStream=DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(inputStream);
//获取连接池对象
DataSource dataSource= DruidDataSourceFactory.createDataSource(properties);
//获取连接
Connection connection=dataSource.getConnection();
System.out.println(connection);
}
}
定义Druid连接池工具类
---------定义一个类 JDBCUtils--------------------------
package cn.itcast.utils;
import cn.itcast.datasource.druid.DruidDemo;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtils {
//定义成员变量 dataSource
private static DataSource dataSource;
static{
try {
//定义配置文件
//加载配置文件
Properties properties=new Properties();
// InputStream inputStream= DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
// properties.load(inputStream);
properties.load( DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties"));
//获取连接池对象
dataSource= DruidDataSourceFactory.createDataSource(properties);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
//获取连接
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
//释放资源
public static void close(Statement statement,Connection connection){
// if(statement!=null){
// try {
// statement.close();
// } catch (SQLException e) {
// e.printStackTrace();
// }
// }
// if(connection!=null){
// try {
// connection.close();
// } catch (SQLException e) {
// e.printStackTrace();
// }
// }
close(null,statement,connection);
}
public static void close(ResultSet resultSet, Statement statement, Connection connection){
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(statement!=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//获取连接池方法
public static DataSource getDataSource(){
return dataSource;
}
}
-------------提供静态代码块加载配置文件,初始化连接对象-----------------------
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db3?useUnicode=true&characterEncoding=utf-8&characterSetResults=utf-8
username=root
password=123456
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000
# maxIdle=10
minIdle=3
-----------------提供方法----------------------------------------------------
1. 获取连接方法:通过数据库连接池获取连接
2. 释放资源
3. 获取连接池的方法
package cn.itcast.datasource.druid;
import cn.itcast.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
public class DruidDemo2 {
public static void main(String[] args) throws Exception {
//完成添加操作。给account表添加一条记录
//获取连接
Connection connection= JDBCUtils.getConnection();
//定义SQL
String sql="insert into account values(null,?,?)";
//获取pstmt对象
PreparedStatement preparedStatement=connection.prepareStatement(sql);
//给?赋值
preparedStatement.setString(1,"wangwu");
preparedStatement.setDouble(2,3000);
//执行SQL
int count=preparedStatement.executeUpdate();
//打印
System.out.println(count);
}
}
Java-C3P0和Druid连接池的运用的更多相关文章
- dbcp2、c3p0、druid连接池的简单配置
引入Maven依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...
- 【Java EE】Day06 JDBC连接池介绍、C3P0连接池实现、Druid连接池实现、JDBCTemplate
一.数据库连接池介绍 1.引入 之前:每次都要获取连接释放连接 现在:连接重复使用 2.概念: 存放数据库连接的容器 3.实现 DataSource接口 三种实现 标准实现 连接池实现 C3P0 Dr ...
- Java学习笔记42(数据库连接池 druid连接池)
druid连接池: 是阿里的连接池,druid的稳定性及效率都很高,目前用的比较广,所以建议开发过程中尽量用druid连接池(支持国产最重要) druid连接池也需要配置文件,配置文件必须是prope ...
- Druid连接池和springJDbc框架-Java(新手)
Druid连接池: Druid 由阿里提供 安装步骤: 导包 durid1.0.9 jar包 定义配置文件 properties文件 名字任意位置也任意 加载文件 获得数据库连接池对象 通过Durid ...
- Druid连接池工具类
package cn.zmh.PingCe; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSo ...
- Java开发笔记(一百五十一)Druid连接池的用法
C3P0连接池自诞生以来在Java Web领域反响甚好,业已成为hibenate框架推荐的连接池.谁知人红是非多,C3P0在大型应用场合中暴露了越来越多的局限性,包括但不限于下列几点:1.C3P0管理 ...
- spring+mybatis+c3p0数据库连接池或druid连接池使用配置整理
在系统性能优化的时候,或者说在进行代码开发的时候,多数人应该都知道一个很基本的原则,那就是保证功能正常良好的情况下,要尽量减少对数据库的操作. 据我所知,原因大概有这样两个: 一个是,一般情况下系统服 ...
- 【Java】java数据库连接中C3P、DBCP、Druid连接池的使用
使用JDBC的步骤:1.加载数据库驱动2.通过DriverManager获得数据库连接3.通过Connection获得Statement对象4.使用Statement执行SQL语句.5.操作结果集合6 ...
- java基础之JDBC八:Druid连接池的使用
基本使用代码: /** * Druid连接池及简单工具类的使用 */ public class Test{ public static void main(String[] args) { Conne ...
- Druid 连接池 JDBCUtils 工具类的使用
Druid工具介绍 它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser. 支持所有JDBC兼容的数据库,包括Oracle.MySQL. ...
随机推荐
- VRRP 虚拟路由器冗余协议
目录 文章目录 目录 为什么要使用 VRRP 技术? VRRP VRRP 的概念 VRRP 的工作原理 VRRP 的状态机 VRRP 的工作过程 VRRP 的选举机制 VRRP 的报文格式 VRRP ...
- 给公众号接入`FastWiki`智能AI知识库,让您的公众号加入智能行列
最近由于公众号用户太多,我就在思考有啥方式能给微信公众号的粉丝提供更多的更好的服务?这个时候我就想是否可以给公众号接入一下AI?让用户跟微信公众号对话,然后还能回到用户的问题,并且我提供一些资料让AI ...
- AIRIOT物联网低代码平台如何配置http客户端?
AIRIOT物联网低代码平台一直保持和市场脉搏同频,支持市面上95%以上驱动,驱动能力夯实,大大满足任意数据采集需求.AIRIOT支持分布式部署,数据采集能力强,解决海量数据采集一台服务器采集困难的问 ...
- winform 绘图控件 chart 实时曲线图
官方教程:http:////files.cnblogs.com/files/HelloQLQ/Winform图表.rar 更多参考:https://blog.csdn.net/boxuming/art ...
- ChatGPT还是有点东西的-public static <T> List<T> Arrays.asList(T... a) {...}
背景 业务开发需要判断业务状态是否在30.40.50.60的集合内,所以写了以下代码 int[] inLiq = {30,40,50,60}; return Arrays.asList(inLiq). ...
- Swift 计算字符串展示的区域
一.如果是普通文本,那么可以采用NSString的方法,代码如下: import UIKit import PlaygroundSupport class MyViewController : UIV ...
- css之伪元素选择器
注:本博客内容来自尚硅谷禹神的前端入门课程 什么是伪元素? 很像元素,但不是元素(element),是元素中的一些特殊位置. 伪元素语法中的::可以用:,因为css2中没有明确区分伪类和伪元素,但是s ...
- Java线程概念集合
线程 概念 1.程序:为解决某种问题,使用计算机语言编写的一系列指令(代码)的集合 2.进程:正在运行的程序(被加载到内存中),是操作系统进行资源分配的最小单位 3.线程:进程可以进一步细化为线程(比 ...
- Vue Router 4与路由管理实战
title: Vue Router 4与路由管理实战 date: 2024/6/7 updated: 2024/6/7 excerpt: 这篇文章介绍了如何在Vue.js应用中利用Vue Router ...
- C#.NET HTTPS 双向证书 请求被中止: 未能创建 SSL/TLS 安全通道。
请求被中止: 未能创建 SSL/TLS 安全通道. 用mmc 给私钥证书添加Everyone 的权限.