1.概念

  • 其实就是一个容器(集合),存放数据库连接的容器
  • 当系统初始化好后,容器被创建,容器会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。
  • 好处:节约资源,用户访问高效

2.实现:

2.1 标准接口:DataSource javax.aql包下的

  1. 方法:

    • 获取连接:getConnextion()
    • 归还连接:如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭数据库了。而是归还连接
  2. 一般我们不去实现它,有数据库厂商实现

2.2 C3P0:数据库连接池技术

步骤

  1. 导入jar包(两个) c3p0-0.9.5.2 mchange-commons-java-0.2.12 mysql-connector-java-5.1.38

    • 不要忘记导入数据库的驱动架包
  2. 定义配置文件:
    • 名称:c3p0.propertie或者c3p0-config.xml
    • 路径:直接将文件放在src目录下即可
  3. 创建核心对象 数据库连接池对象 ComboPooledDataSource
  4. 获取连接: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连接池的运用的更多相关文章

  1. dbcp2、c3p0、druid连接池的简单配置

    引入Maven依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  2. 【Java EE】Day06 JDBC连接池介绍、C3P0连接池实现、Druid连接池实现、JDBCTemplate

    一.数据库连接池介绍 1.引入 之前:每次都要获取连接释放连接 现在:连接重复使用 2.概念: 存放数据库连接的容器 3.实现 DataSource接口 三种实现 标准实现 连接池实现 C3P0 Dr ...

  3. Java学习笔记42(数据库连接池 druid连接池)

    druid连接池: 是阿里的连接池,druid的稳定性及效率都很高,目前用的比较广,所以建议开发过程中尽量用druid连接池(支持国产最重要) druid连接池也需要配置文件,配置文件必须是prope ...

  4. Druid连接池和springJDbc框架-Java(新手)

    Druid连接池: Druid 由阿里提供 安装步骤: 导包 durid1.0.9 jar包 定义配置文件 properties文件 名字任意位置也任意 加载文件 获得数据库连接池对象 通过Durid ...

  5. Druid连接池工具类

    package cn.zmh.PingCe; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSo ...

  6. Java开发笔记(一百五十一)Druid连接池的用法

    C3P0连接池自诞生以来在Java Web领域反响甚好,业已成为hibenate框架推荐的连接池.谁知人红是非多,C3P0在大型应用场合中暴露了越来越多的局限性,包括但不限于下列几点:1.C3P0管理 ...

  7. spring+mybatis+c3p0数据库连接池或druid连接池使用配置整理

    在系统性能优化的时候,或者说在进行代码开发的时候,多数人应该都知道一个很基本的原则,那就是保证功能正常良好的情况下,要尽量减少对数据库的操作. 据我所知,原因大概有这样两个: 一个是,一般情况下系统服 ...

  8. 【Java】java数据库连接中C3P、DBCP、Druid连接池的使用

    使用JDBC的步骤:1.加载数据库驱动2.通过DriverManager获得数据库连接3.通过Connection获得Statement对象4.使用Statement执行SQL语句.5.操作结果集合6 ...

  9. java基础之JDBC八:Druid连接池的使用

    基本使用代码: /** * Druid连接池及简单工具类的使用 */ public class Test{ public static void main(String[] args) { Conne ...

  10. Druid 连接池 JDBCUtils 工具类的使用

    Druid工具介绍 它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser. 支持所有JDBC兼容的数据库,包括Oracle.MySQL. ...

随机推荐

  1. 7月 Splashtop上线了这些新功能 快来看鸭

    经过我们的攻城狮天天努力,我们的软件又得到了升级和完善,上线了一些有用的新功能和增强功能,快来看看吧. Splashtop已为Splashtop Business Access,Splashtop远程 ...

  2. 日常Bug排查-偶发性读数据不一致

    日常Bug排查-偶发性读数据不一致 前言 日常Bug排查系列都是一些简单Bug的排查.笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材. Bug现场 业务场景 先描述这个问题出现的业务场景. ...

  3. 超全、超简单Vue微信公众号授权登录指南

    <template> <div id="app"> <h1>微信授权登陆</h1> <div> <div> ...

  4. 痞子衡嵌入式:从JLink V7.62开始优化了手动增加新MCU型号支持方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是JLink 7.62优化了手动增加新MCU型号支持方法. JLink 工具可以说是搞单片机开发的必备神器,JLink 包括一个硬件仿真器 ...

  5. 一文教你基于LangChain和ChatGLM3搭建本地知识库问答

    本文分享自华为云社区<[云驻共创]LangChain+ChatGLM3实现本地知识库,转华为云ModelArts,实现大模型AI应用开发> ,作者:叶一一. 一.前言 本期华为云的讲师是华 ...

  6. 微信iOS消息拦截插件教程-手机越狱环境搭建

    微信iOS消息拦截插件教程-手机越狱环境搭建 标签(空格分隔): ios越狱开发 环境 背景介绍 本教程所有内容免费 本教程来源于一次知识分享,如果有需要了解更多的 请联系QQ:480071411 i ...

  7. 开源一站式敏捷测试管理&极简项目管理 itest(爱测试) 6.6.0 发布 ,新增拖拽生成接口测试断言

    itest 简介 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试5合1,又有丰富的统计分析.可按测试包分配测试用例执行,也可建测试迭代 ...

  8. react自定义导航组件 路由参数

    为何需要自定义导航? 因为在项目中往往不是所有的声明式导航都是需要a标签完成,有时候可能需要别的标签,此时如果在需要的地方去写编程式导航就会有代码重复可能性,就在对于公共代码进行提取. 思路: 定义一 ...

  9. 使用Vulkan-Loader将ncnn代码改成Dynamic Loader Vulkan的形式

    原本你写的程序是静态链接的系统的vulkan-1.dll,如果系统不存在vulkan-1.dll,则会直接崩溃. 关于将ncnn静态链接vulkan改成动态加载vulkan的形式,然后提供这两个函数 ...

  10. 此计算机上不存在虚拟机管理服务(VMMS)。请确保已启用“Hyper-V 服务”功能。

    此计算机上不存在虚拟机管理服务(VMMS).请确保已启用"Hyper-V 服务"功能. 解决方法: 在主板BIOS 里开启VT. Intel Virtualization Tech ...