DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要3个包:commons-dbcp.jar,commons-pool.jar,commons-collections.jar。
由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。
【1】配置文件
#mysql db.className=com.mysql.jdbc.Driver #mysql to write wdb.url=jdbc:mysql:// wdb.username=root wdb.pwd=123456 wdb.maxActive=30 wdb.maxIdle=10 wdb.maxWait=3600000 #mysql common config info common.db.removeAbandoned=false common.db.removeAbandonedTimeout=120 common.db.testOnBorrow=true common.db.logAbandoned=true
【2】创建数据库连接池并获得数据库连接
package hhf.dbcp.util; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; import org.apache.commons.dbcp2.BasicDataSource; import org.apache.commons.dbcp2.BasicDataSourceFactory; /** * Get the connection from writing DB */ public class WDBConnUtils { private static BasicDataSource dataSource = null; public static void init() { if (dataSource != null) { try { dataSource.close(); } catch (Exception e) { e.printStackTrace(); } dataSource = null; } try { Properties p = new Properties(); p.setProperty("driverClassName", SystemConstants.DB_CLASS_NAME); p.setProperty("url", SystemConstants.W_DB_URL); p.setProperty("username", SystemConstants.W_DB_USER_NAME); p.setProperty("password", SystemConstants.W_DB_USER_PWD); p.setProperty("maxActive", SystemConstants.W_DB_MAX_ACTIVE); p.setProperty("maxIdle", SystemConstants.W_DB_MAX_IDLE); p.setProperty("maxWait", SystemConstants.W_DB_MAX_WAIT); p.setProperty("removeAbandoned", SystemConstants.DB_REMOVE_ABANDONED); p.setProperty("removeAbandonedTimeout", SystemConstants.DB_REMOVE_ABANDONED_TIMEOUT); p.setProperty("testOnBorrow", SystemConstants.DB_TEST_ONBORROW); p.setProperty("logAbandoned", SystemConstants.DB_LOG_ABANDONED); dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(p); } catch (Exception e) { e.printStackTrace(); } } public static synchronized Connection getConnection() throws SQLException { if (dataSource == null) { init(); } Connection conn = null; if (dataSource != null) { conn = dataSource.getConnection(); conn.setAutoCommit(false); } return conn; } /** * 关闭资源 * @param conn * @param pstmt * @param rs */ public static void closeResources(Connection conn, PreparedStatement pstmt, ResultSet rs) { if (null != rs) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } finally { if (null != pstmt) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } finally { if (null != conn) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } } } } } } /** * 关闭资源 * @param conn * @param pstmt */ public static void closeResources(Connection conn, PreparedStatement pstmt) { if (null != pstmt) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } finally { if (null != conn) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } } } } }
【3】执行插入和查询操作
package hhf.dbcp.throughput; import hhf.dbcp.util.WDBConnUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * 数据库操作 * @author HHF * 2014年12月29日 */ public class InsertQueryDao { /** * 插入数据 * @param num */ public void save(String num) { String NEWS_INFO_INSERT = "INSERT INTO table(num) values(?)"; Connection conn = null; PreparedStatement pst = null; try { conn = WDBConnUtils.getConnection(); pst = conn.prepareStatement(NEWS_INFO_INSERT); pst.setString(1, num); pst.execute(); conn.commit(); } catch (SQLException e) { e.printStackTrace(); } finally { WDBConnUtils.closeResources(conn, pst); } } /** * 查询数据 * @param num * @return */ public String query(String num) { String NEWS_INFO_QUERY_LIST = "SELECT news_id FROM table num=? "; Connection conn = null; PreparedStatement pst = null; ResultSet rs = null; String result = null; try { conn = WDBConnUtils.getConnection(); pst = conn.prepareStatement(NEWS_INFO_QUERY_LIST); pst.setString(1, num); rs = pst.executeQuery(); while(rs.next()){ result = rs.getString("news_id"); } } catch (Exception e) { e.printStackTrace(); }finally{ WDBConnUtils.closeResources(conn, pst, rs); } return result; } }
【4】测试
public class Main { private static final Log log = LogFactory.getLog(Main.class); public void doProcess(String processTime1, String processTime2, int runMode) { InsertQueryDao dao = new InsertQueryDao(); String num = dao.query("0");//获得查询结果 log.info("num " + num); } }
(PS:附上项目测试源码和相关的jar包)
相关推荐
DBCP(Database Connection Pool)是Apache Commons项目中的一个数据库连接池组件,主要目的是为了提高数据库连接的复用性,减少创建和销毁连接的开销,从而提升应用的性能。DBCP2是其第二个主要版本,提供了更稳定...
数据库连接池的基本原理是预先创建并维护一定数量的数据库连接,当应用需要时,可以从池中获取连接,使用完毕后归还,而不是每次操作都创建新的连接。 **连接池的重要性**: 1. **资源复用**:通过重用已建立的...
数据库连接池在应用服务器启动时创建一定数量的数据库连接,并将这些连接放入池中,当应用程序需要访问数据库时,可以从连接池中获取一个连接,使用完毕后归还给连接池,而不是直接关闭,这样可以有效地减少数据库...
在"java连接mysql数据库连接池demo"这个项目中,我们可以深入探讨以下几个方面: 1. **JDBC**: JDBC是Java平台的标准接口,它允许Java程序与各种数据库进行交互。通过JDBC,开发者可以执行SQL语句,处理结果集,...
Apache DBCP(Database Connection Pool)是Apache软件基金会下的一个开源项目,主要提供数据库连接池服务。数据库连接池在Java应用程序中扮演着重要的角色,它能够有效地管理数据库连接,提高应用性能并降低资源...
综上所述,DBCP数据库连接池是Java Web开发中常用的一种数据库连接管理工具,通过合理的配置和使用,可以显著提高应用的性能和稳定性。在实际项目中,结合Spring等框架,可以更便捷地管理和使用数据库连接。确保正确...
### common-dbcp2数据库连接池参数详解 随着`commons-dbcp2`的版本更新,数据库连接池的配置也有了相应的调整。为了更好地理解和配置这些参数,本文将详细解析`commons-dbcp2`中的一些关键参数及其意义。 #### 1. ...
MySQL数据库连接池是数据库管理中的一个重要概念,它在Linux环境下被广泛应用。数据库连接池是一种管理数据库连接的技术,通过预先创建并维护一定数量的数据库连接,为应用程序提供高效、可靠的数据库访问服务。它...
2. `commons-dbcp-1.4.jar`: 这就是DBCP的主要库文件,包含了数据库连接池的实现。它提供了BasicDataSource类,这是一个符合JDBC DataSource接口的数据源,可以配置连接池的各种参数,如最大连接数、最小连接数、...
了解并掌握这些知识点,将有助于你在实际项目中有效地使用Apache DBCP来构建和管理数据库连接池,提升应用的性能和可靠性。同时,不断关注和学习新的数据库连接池技术,可以帮助你适应不断变化的开发需求和环境。
本资源"03-数据库连接池驱动"包含了三种常用的数据库连接池驱动:C3P0、Druid和DBCP,它们都是为了优化数据库连接管理和复用而设计的。 首先,C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3...
数据库连接池在初始化时会创建一定数量的数据库连接并保存起来,当应用程序需要连接时,可以从池中获取一个已存在的连接,而不是每次都去新建,用完后也不立即关闭,而是归还给连接池。这样可以显著减少建立和释放...
DBCP(Apache Commons DBCP)和C3P0是两种常见的开源数据库连接池实现,它们允许开发者有效地管理和重用数据库连接,避免了每次请求数据库时创建新的连接,从而降低了系统的资源消耗。 DBCP,全称为Apache Commons ...
MySQL数据库连接池是针对MySQL数据库的一种优化方式,通过预先创建并维护一定数量的数据库连接,避免了每次需要连接数据库时的创建和销毁过程,从而提高了应用的性能和资源利用率。 首先,我们需要了解什么是数据库...
数据库连接池在初始化时会创建一定数量的数据库连接,这些连接可以在多个请求之间复用,避免了频繁地创建和关闭物理数据库连接,从而减少了系统开销。 在Java应用中,DBCP通常与其他数据库驱动一起使用,如MySQL ...
使用DBCP数据库连接池,你需要在你的Java项目中引入这三个JAR文件,并进行相应的配置。以下是一些基本配置步骤: 1. 将这三个JAR文件添加到项目的类路径中。 2. 创建一个XML配置文件(如`dbcp-config.xml`),定义...
本文将深入探讨数据库连接池的概念、工作原理以及如何创建和使用。 一、数据库连接池简介 数据库连接池是一种在应用服务器启动时预先初始化一定数量的数据库连接,并将这些连接保存在一个池中。当应用需要与数据库...
DBCP,全称为Apache Database Connection Pool,是由Apache软件基金会开发的一款开源数据库连接池组件。它在Java应用程序中扮演着至关重要的角色,通过有效地管理和复用数据库连接,显著提高了数据库访问性能,同时...