开源数据库连接池的使用

上一篇文章简单介绍了数据库连接池的基本原理实现,链接:数据库连接池的简单实现这里我们介绍两种常用数据库连接池的使用:

1.DBCP数据库连接池:

package com.itheima.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.commons.dbcp.BasicDataSource;

public class DBCPDemo {

	public static void main(String[] args) {

		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {

			BasicDataSource source = new BasicDataSource();
			source.setDriverClassName("com.mysql.jdbc.Driver");
			source.setUrl("jdbc:mysql://localhost:3306/day11");
			source.setUsername("root");
			source.setPassword("root");
			conn = source.getConnection();
			ps = conn.prepareStatement("select * from account");
			rs = ps.executeQuery();
			while(rs.next()) {
				String name = rs.getString(2);
				String salary = rs.getString(3);
				System.out.println(name + " : " + salary);
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} finally {
			if(rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					rs = null;
				}
			}
			if(ps != null) {
				try {
					ps.close();
				} catch (SQLException e) {
					ps = null;
				}
			}
			if(conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					conn = null;
				}
			}
		}
	}
}

这里需要导入相应的dbcp jar包,这里我就不提供了。

以上代码是通过set方法设置类加载路径、url、数据库用户名和密码,此外我们还可以通过properties文件进行配置。

properties文件内的属性名称和setXXX方法对应,只是首字母小写。

dbcp-config.properties文件内容如下:

#类加载路径
driverClassName=com.mysql.jdbc.Driver
#url数据库访问路径
url=jdbc:mysql://localhost:3306/day11
#用户名
username=root
#密码
password=root
package com.itheima.jdbc;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

public class DBCPDemo {
	private static Properties properties = new Properties();
	static {
		try {
			properties.load(new FileReader("dbcp-config.properties"));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}

	public static void main(String[] args) {

		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {

			BasicDataSourceFactory factory = new BasicDataSourceFactory();
			DataSource source = factory.createDataSource(properties);
			conn = source.getConnection();

			ps = conn.prepareStatement("select * from account");
			rs = ps.executeQuery();
			while(rs.next()) {
				String name = rs.getString(2);
				String salary = rs.getString(3);
				System.out.println(name + " : " + salary);
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} finally {
			if(rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					rs = null;
				}
			}
			if(ps != null) {
				try {
					ps.close();
				} catch (SQLException e) {
					ps = null;
				}
			}
			if(conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					conn = null;
				}
			}
		}
	}
}

此外dbcp-config.properties文件内还可以配置一下属性

#数据库连接池初始化连接数
initialSize=10
#数据库连接池最大连接数
maxActive=50
#数据库连接池最小空闲连接数
minIdle=5
#数据库连接池最大空闲连接数
maxIdle=20
#等待超时,当一个链接空闲时间超过该时间,该链接定义为空闲连接
maxWait=60000

2.c3p0数据库连接池

package com.itheima.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Demo {

	public static void main(String[] args) {

		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {

			ComboPooledDataSource source = new ComboPooledDataSource();
			source.setDriverClass("com.mysql.jdbc.Driver");
			source.setJdbcUrl("jdbc:mysql://localhost:3306/day11");
			source.setUser("root");
			source.setPassword("root");
			conn = source.getConnection();

			ps = conn.prepareStatement("select * from account");
			rs = ps.executeQuery();
			while(rs.next()) {
				String name = rs.getString(2);
				String salary = rs.getString(3);
				System.out.println(name + " : " + salary);
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} finally {
			if(rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					rs = null;
				}
			}
			if(ps != null) {
				try {
					ps.close();
				} catch (SQLException e) {
					ps = null;
				}
			}
			if(conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					conn = null;
				}
			}
		}
	}
}

相应的可以通过配置c3p0-config.xml文件

以下是官方文档的叙述:

By default, c3p0 will look for an XML configuration file in its classloader‘s resource path under the name "/c3p0-config.xml". That means the XML file should be placed in a directly or jar file directly named in your applications CLASSPATH, in WEB-INF/classes,
or some similar location.

(也就是说:名字必须为c3p0-config.xml,文件位置:类加载路径下,即eclipse的src目录下)

package com.itheima.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Demo {

	public static void main(String[] args) {

		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			//如果不通过setXXX方法设置属性,则会自动到类加载目录下查找c3p0-config.xml文件
			//查找到后默认使用<default-config>标签下的配置信息,也可以在构造source对象时传入
			//配置的名称,即ComboPooledDataSource source = new ComboPooledDataSource("myconfig");
			//当然c3p0-config.xml文件里配置了<default-config>和<named-config>,一般情况下使用其中一个就行了。
			ComboPooledDataSource source = new ComboPooledDataSource();
			conn = source.getConnection();

			ps = conn.prepareStatement("select * from account");
			rs = ps.executeQuery();
			while(rs.next()) {
				String name = rs.getString(2);
				String salary = rs.getString(3);
				System.out.println(name + " : " + salary);
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} finally {
			if(rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					rs = null;
				}
			}
			if(ps != null) {
				try {
					ps.close();
				} catch (SQLException e) {
					ps = null;
				}
			}
			if(conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					conn = null;
				}
			}
		}
	}
}

c3p0-config.xml:

<?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/day11</property>
    <property name="user">root</property>
    <property name="password">root</property>
  </default-config>

  <named-config name="myconfig">
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/day11</property>
    <property name="user">root</property>
    <property name="password">root</property>
  </named-config>
</c3p0-config>

<default-config>和<named-config>两者只配置一个就可以了

此外xml文件还可以配置其他参数,这里就不一一赘述了,官方文档写的很清楚。

时间: 2024-10-13 13:00:50

开源数据库连接池的使用的相关文章

开源数据库连接池之C3P0

本篇介绍几种开源数据库连接池,同时重点讲述如何使用C3P0数据库连接池. 之前的博客已经重点讲述了使用数据库连接池的好处,即是将多次创建连接转变为一次创建而使用长连接模式.这样能减少数据库创建连接的消耗.正是由于数据库连接池的思想非常重要,所以市面上也有很多开源的数据库连接池供我们使用.主要有以下三个: DBCP数据库连接池 C3P0 数据库连接池 Tomcat内置的数据库连接池(DBCP) 本篇主要讲述C3P0数据库连接池的使用,关于另外两个数据库连接池的用法请看<开源数据库连接池之DBCP>

[javaEE] 开源数据库连接池

一些开源组织提供了数据源的独立实现: DBCP数据库连接池 C3P0数据库连接池 Apache Tomcat内置的连接池 DBCP连接池 apache提供的连接池实现,需要导入common-dbcp.jar commons-pool.jar import java.io.FileReader; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.util.Pro

mysql笔记八——开源数据库连接池DBCP和C3P0的使用

DBCP数据库连接池 DBCP 是 Apache 软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个 jar 文件: Commons-dbcp.jar:连接池的实现 Commons-pool.jar:连接池实现的依赖库 Tomcat 的连接池正是采用该连接池来实现的.该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用. 核心代码 static{ InputStream in = JdbcUtil.class.getClassLoader(). get

开源框架数据库连接池dbcp的使用方法

package com.mysql.demo; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; //运用开源数据库连接池DBCP //引用dbcp.j

javaweb学习总结(三十九)——数据库连接池

一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出.拓机.如下图所示: 二.使用数据库连接池优化程序性能 2.1.数据库连接池的基本概念 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现的尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性

MySql数据库连接池

1.传统链接(如下为示意图) 注意: (1).传统方式找DriverManager要连接,数目是有限的. (2).传统方式的close(),并没有将Connection重用,只是切断应用程序和数据库的桥梁,即无发送到SQL命令到数据库端执行  (3).项目中,对于Connection不说,不会直接使用DriverManager取得,而使用连接池方式. 2.采用连接池(示意图) 3.开源数据库连接池 (1).现在很多Web服务器(Weblogic, WebSphere, Tomcat)都提供了Da

数据库连接池SQL Relay简介

作者:zhanhailiang 日期:2014-12-27 简介 SQLRelay 是一个持久化的数据库连接池,用来为 Unix 或者 Linux 提供数据库连接池.代理以及负载均衡的功能. 曾在2004淘宝架构迁移充当管理Oracle数据库链接的中间件,请见: <淘宝业务发展及技术架构>分享 文字版 <淘宝业务发展及技术架构>分享 PPT版 连接池示意图: 负载均衡示意图: 功能特性 加速数据库驱动的基于 Web 的应用程序 增加 Web 应用程序的可扩展性 分布式的访问复制的数

数据库连接池的原理

这次我们采取技术演进的方式来谈谈数据库连接池的技术出现过程及其原理,以及当下最流行的开源数据库连接池jar包. 一.早期我们怎么进行数据库操作        1.原理:一般来说,java应用程序访问数据库的过程是: ①装载数据库驱动程序: ②通过jdbc建立数据库连接: ③访问数据库,执行sql语句: ④断开数据库连接.        2.代码  // 查询所有用户 [java] view plain copy print? Public void FindAllUsers(){ //1.装载s

常用数据库连接池

现在常用的开源数据库连接池主要有c3p0.dbcp.proxool三种,其中:Spring 推荐使用dbcp:Hibernate 推荐使用c3p0和proxool: 1. DBCP:apacheDBCP(DataBase connection pool)数据库连接池.是apache上的一个 java连接池项目,也是 tomcat使用的连接池组件.单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar由于建立数据库连