博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java:数据库连接池
阅读量:4945 次
发布时间:2019-06-11

本文共 2516 字,大约阅读时间需要 8 分钟。

一、什么是数据库连接池?

官方:连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。

个人理解:创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加安全可靠。

二、数据库连接池的运行机制

(1)  程序初始化时创建连接池

(2) 使用时向连接池申请可用连接
(3) 使用完毕,将连接返还给连接池
(4) 程序退出时,断开所有连接,并释放资源

三、数据库连接池的使用

作为开源的数据库连接池,C3P0是一个优秀的连接池,性能也十分可靠。

首先到http://sourceforge.net/projects/c3p0/下载相应的jar包,总共三个,如下图所示。

其次将jar包导入到工程当中,然后就可以使用cp30了。

示例代码如下:

 

package com.zww.server;import java.beans.PropertyVetoException;import java.sql.Connection;import java.sql.SQLException;import com.mchange.v2.c3p0.ComboPooledDataSource;public class ConnectionManager {//使用单例模式创建数据库连接池	private static ConnectionManager instance;	private static ComboPooledDataSource dataSource;	private ConnectionManager()throws SQLException,PropertyVetoException{		dataSource=new ComboPooledDataSource();		dataSource.setUser("root");//用户名		dataSource.setPassword("345678");//密码		dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/zrr");//数据库地址		dataSource.setInitialPoolSize(5);//初始化连接数		dataSource.setMinPoolSize(1);//最小连接数		dataSource.setMaxPoolSize(20);//最大连接数		dataSource.setMaxStatements(50);//最长等待时间		dataSource.setMaxIdleTime(60);//最大空闲时间(毫秒)	}	public static final ConnectionManager getInstance(){		if(instance==null){			try {				instance = new ConnectionManager();			} catch (Exception e) {				e.printStackTrace();			}		}		return instance;	}	public synchronized final Connection getConnection(){		Connection conn=null;		try {			conn=dataSource.getConnection();		} catch (SQLException e) {			e.printStackTrace();		}		return conn;	}}

  

package com.zww.server;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class ConnectionDemo {public static void main(String[] args) {	System.out.println("用连接池--------------------");	for(int i=0;i<20;i++){		long beginTime=System.currentTimeMillis();		Connection conn=ConnectionManager.getInstance().getConnection();		try {			PreparedStatement pstmt = conn					.prepareStatement("select * from event ");			ResultSet rs = pstmt.executeQuery();			while (rs.next()) {				//do nothing			}		} catch (Exception e) {			e.printStackTrace();		}finally{			try {				conn.close();			} catch (SQLException e) {				e.printStackTrace();			}		}		long endTime=System.currentTimeMillis();		System.out.println("第"+(i+1)+"次执行时间为:"+(endTime-beginTime));	}}}

  结果表明,在使用连接池时,只在第一次初始化时,比较耗时,完成初始化之后,使用连接池进行数据库操作明显比不使用连接池花费的时间少。

 

转载于:https://www.cnblogs.com/ipetergo/p/6613017.html

你可能感兴趣的文章
SQL 将一个表中的所有记录插入到一个临时表中
查看>>
nmea协议
查看>>
js 中对象的特性
查看>>
hdoj3714【三分】
查看>>
嵌入式开发入门(4)—驱动入门之时序图分析【20121211修改,未完】
查看>>
Python 使用字符串
查看>>
Quartz Core之CALayer
查看>>
java:一个项目的开发过程(转)
查看>>
操作系统下载路径
查看>>
网站开发 关于图片压缩 以及图片使用
查看>>
hive的count(distinct id)测试--慎用
查看>>
第九周周总结
查看>>
Logistic Regression
查看>>
8lession-基础类型转化
查看>>
FlashCS5作成SWC,在Flex4中使用(1)
查看>>
vue-cli目录结构及说明
查看>>
JS 数据类型转换
查看>>
WeQuant交易策略—RSI
查看>>
osgearth将视点绑定到一个节点上
查看>>
PHP 当前时间秒数+数值,然后再转换成时间。
查看>>