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

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

1.为什么要有数据库连接池?

首先我们来看看传统两个连接数据库的方法

方法一:直接在main方法里连接数据库 也是最简单的连接(使用的时候注意导入msql驱动包),然后执行查询 获得名字和年龄性别

conn=DriverManager.getConnection("jdbc:mysql://localhost/study1?seUnicode=true&characterEncoding=UTF-8","root","root");		  System.out.println(conn.getClass());		  stmt = conn.prepareStatement("select * from t_person");		  resultSet = stmt.executeQuery();		  while(resultSet.next())		  {			  String name = resultSet.getString("Name");			  int age=resultSet.getInt("Age");			  boolean gender = resultSet.getBoolean("Gender");			  System.out.println("名字:"+name+"年龄"+age+"性别"+(gender?"男":"女"));		  }

方法二:通过封装JDBCGB把数据库的连接放到常用类中,并通过静态类来加载 只加载一次

public class JDBCGB{	private static final String drivername;	private static final String dburl;	private static final String dbusername;	private static final String dbpassword;	static 	{			InputStream instream=null;				try{  		instream = JDBCGB.class.getResourceAsStream("config.pro");			Properties prop = new Properties();			prop.load(instream);		drivername=prop.getProperty("drivername");		dburl=prop.getProperty("dburl");		dbusername=prop.getProperty("dbusername");		dbpassword = prop.getProperty("dbpassword");		}				catch(IOException ex)		{			throw new RuntimeException("config",ex);					}		finally		{			if(instream!=null)			{				try				{				instream.close();					}catch(IOException e)				{				}			}					}		try		{			Class.forName(drivername);					}		catch (ClassNotFoundException e)		{			throw new RuntimeException("mysql jdbc",e);		}		}

相关配置文件放到src下面

config.pro

drivername=com.mysql.jdbc.Driverdburl=jdbc:mysql://localhost/study1?seUnicode=true&&characterEcoding=UTF8dbusername=rootdbpassword=root

  

当我们每次打开数据库系统的时候会进行许多工作,如安全验证,内存回收分配,连接断开等,当我们使用传统的方式操作数据库时,

频繁的连接会导致数据库的性能降低,因此数据库连接池就出现了。如c3p0

 

2.怎么去使用c3p0数据库?

首先要导入c3p0数据库的驱动包,有

c3p0-0.9.5.jar

mchange-commons-java-0.2.9.jar
mysql-connector-java-5.1.7-bin.jar

然后写好C3p0的配置文件到src目录下,这样第一步就完成了

com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/dataSourceDemo?characterEncoding=UTF8
root
root
15
3
3
3
600
0

  

package dataSourceDemo;import java.sql.Connection;import java.sql.SQLException;import javax.sql.DataSource;import com.mchange.v2.c3p0.ComboPooledDataSource;public class Test {public void main(String args[]){	//datasource这个接口的实现类 combopool	DataSource dataSource= new ComboPooledDataSource();	//这样就创建了数据库的对象,它会自动的加载数据库的配置文件	try {		Connection conn=dataSource.getConnection();        //做你需要做的事情		/*		 * 		 */		//归还连接给连接池         conn.close();	} 	catch (SQLException e) {         		 e.printStackTrace();	}//获得数据库的连接	}

数据库连接池的原理,特点

  • 程序启动时 连接池就会创建若干连接并且保存到连接池内
  • 当用户需要的时候,就直接从连接池给出
  • 当用户使用完毕后,就把链接还给连接池
  • 如果超过连接池的最大连接,就会等待用户归还,否则创建。

 

  可以在配置文件xml中配置连接池的连接数,等待时间等。

  下面是常用的配置参数

  maxPoolSize连接池的最大连接数目

  minPoolSize最小连接数目
  initialPoolSize初始化连接数目
  maxIdleTime最大等待时间 超过就销毁连接池

转载于:https://www.cnblogs.com/a986771570/p/8126991.html

你可能感兴趣的文章
iOS 电话在后台运行时,我的启动图片被压缩
查看>>
js --基本语法3 函数,数组,堆棧
查看>>
在centos上使用yum安装rabbitmq-server
查看>>
SpringBoot项目如何打War包
查看>>
Managing Dynamic Objects in C++
查看>>
计算excel列的名字
查看>>
自助Linux之问题诊断工具strace
查看>>
JDBC为什么要使用PreparedStatement而不是Statement
查看>>
git使用
查看>>
jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中,及其相关...
查看>>
错误状态码URL重定向
查看>>
离线安装mysql数据库
查看>>
Oracle 数据库导入、导出
查看>>
批量修改 表结构
查看>>
MySQL的btree索引和hash索引的区别
查看>>
抽象类和接口有什么区别
查看>>
wc2018
查看>>
[转载] 杜拉拉升职记——01 忠诚源于满足
查看>>
那些mv*框架如何选择
查看>>
git工作流程
查看>>