java JDBC数据库连接池技术(Druid ,c3p0)
java JDBC数据库连接池技术
为什么使用数据库连接池?
这个原因与为什么使用线程池有点相似,都是为了提高资源的利用率,减少申请时间的浪费,提高程序的运行效率。 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数 据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统 无尽的与数据库连接。
数据库连接池的优点:
1.1 资源的重用 数据库连接池中的连接可以重复使用,避免频繁的创建,大大减少了性能的开销,即减少了系统的消耗,也增加了系统环境运行的平稳性 1.2提高系统的反应速度 s数据库连接池在初始化的过程中,往往已经创建了若干数据库连接置于连接池中备用,在由业务要使用的时候可以直接拿来使用,避免了初始化和释放过程的时间开销,从而减少了系统的响应时间 1.3新的资源分配手段 当多个应用共用一个数据库的时候,可以在应用层通过数据库连接池的配置,实现某一应用最大数据库连接数的限制,避免某一应用占用过多的资源 1.4统一连接管理,避免数据库的连接泄露 数据库连接池中可设置超时占用设定,强制收回被占用的连接,避免常规数据库连接操作中可能出现的资源泄露
两种数据库连接池技术 C3P0 Druid
C3P0 是一个开源组织提供的一个数据库连接池,速度相对较慢,稳定性还可以。hibernate官方推荐使用
Druid 是阿里提供的数据库连接池,据说是集DBCP 、C3P0 、Proxool 优点于一身的数据库连接池,但是速度不确定是否有BoneCP快,据说是目前最吊的数据库连接池之一
c3p0的使用
*** 步骤:** 1. 导入jar包 (两个) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar , * 不要忘记导入数据库驱动jar包 2. 定义配置文件: * 名称: c3p0.properties 或者 c3p0-config.xml * 路径:直接将文件放在src目录下即可。
3. 创建核心对象 数据库连接池对象 ComboPooledDataSource
4. 获取连接: getConnection
配置文件:
<c3p0-config>
<!-- 使用默认的配置读取连接池对象 -->
<default-config>
<!-- 连接参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3309/db2</property>
//数据库用户名
<property name="user">root</property>
//密码
<property name="password">1234</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/day25</property>
<property name="user">root</property>
<property name="password">root</property>
<!-- 连接池参数 -->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">8</property>
<property name="checkoutTimeout">1000</property>
</named-config>
</c3p0-config>
java代码
package JDBC;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class C3P0 {
public static void main(String[] args) throws SQLException {
//创建数据库连接池
DataSource ds = new ComboPooledDataSource();
//获取连接对象
Connection connection = ds.getConnection();
//定义sql语句
String sql="update count set money=0";
//获取statement对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//执行
int i = preparedStatement.executeUpdate();
System.out.println(i);
//关闭statement,归还connection
preparedStatement.close();
connection.close();
}
}
Druid的使用
1.导入jar包 导入jar包 druid-1.0.9.jar 2.定义配置文件 是properties形式的 可以叫任意名称,可以放在任意目录下 3.加载配置文件 4.获取数据库连接池对象 通过工厂来来获取 DruidDataSourceFactory 5.获取连接 getConnection
配置文件
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3309/db2
username=root
password=1234
//初始化连接数
initialSize=5
//最大连接数
maxActive=10
//最长等待时间
maxWait=3000
工具类
package JDBC;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class DruidUtils {
private static DataSource dataSource=null;
//获取数据库连接池
public static DataSource getDataSource() {
return dataSource;
}
//关闭statement,归还connection
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();
}
}
}
public static void setDataSource(DataSource dataSource) {
DruidUtils.dataSource = dataSource;
}
static {
try {
//加载配置文件经内存
Properties properties = new Properties();
InputStream resourceAsStream = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(resourceAsStream);
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (IOException e) {
System.out.println(e);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}
主函数
package JDBC;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Druid {
public static void main(String[] args) throws SQLException {
//获取连接对象
Connection connection = DruidUtils.getConnection();
//定义sql执行语句
String sql="update count set money=10";
//获取statement对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//执行语句
preparedStatement.executeUpdate();
//关闭
DruidUtils.close(preparedStatement,connection);
}
}
以上就是jdbc数据库连接池技术的一些基础知识,如有错误还请各位批评指正,喜欢我的文章可以点赞关注,谢谢
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释