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包)
相关推荐
适合学习练习用jar包
Apache的DBCP数据库连接池,好用的压缩包。凑字数凑字数
收集了常见的数据库连接jar包,包括oracle、mysql、sql server、db2、opta、dbcp连接池、c3p0连接池等等常见的数据库jar包,不断更新中。
用于实现DBCP连接池所用的JAR依赖文件,包括数据库驱动及创建连接池所需的其他依赖: * commons-collections * commons-dbcp2 * commons-logging * commons-pool2 * mysql-connector
MySql演示JAVA数据库了连接池的使用,包括C3P0和DBCP的使用
用dbcp连接池,mysql数据库,在tomcat服务器下,通过hibernate配置jndi数据源. 我想此标题已经比较明确了。 在此说明一点,hibernate开发小组不推荐在hibernate下使用dbcp,如果一定要的话,请慎重考虑。
用于实现DBCP连接池所用的JAR依赖...用于实现DBCP连接池所用的JAR依赖文件,包括数据库驱动及创建连接池所需的其他依赖: * commons-collections * commons-dbcp2 * commons-logging * commons-pool2 * mysql-connector
mysql数据库代表产品连接池jar包,可以方便创建连接池
NULL 博文链接:https://hb-yym-929.iteye.com/blog/1395675
配置log4j配置数据库连接池(以dbcp连接池为例),并将log信息存储在数据库中(以mysql为例)
包含jdbc连接数据库与dbcp连接数据库代码,方便基础学习与深入理解数据库连接池
mchange-commons-java-0.2.19.jar\c3p0-0.9.5.5.jar\commons-dbcp2-2.9.0.jar\commons-logging-1.2.jar\commons-pool2-2.11.1.jar\
activemq-all-5.5.1.jar,aopalliance-1.0.jar,aspectj-1.8.6.jar,aspectjweaver.jar,bson-3.0.2.jar,c3p0-0.9.1.jar,commons-beanutils-1.8.3.jar,commons-collections-3.2.1.jar,commons-dbcp-1.4.jar,commons-io-...
工具类 JDBCUtil.java(抽取公共部分,解决硬编码问题 DBCP方式实现连接池、配置连接池 ==> 获得连接对象连接数据库) 用户账号实体类 User.java(私有化数据库t_user表中的id,username,password) 接口类 ...
Tomcat+mysql+eclipse数据库连接池的配置
根据综合性能,可靠性,稳定性,扩展性,易用性等因素替换成最优的数据库连接池。 Druid:druid-1.0.29 数据库 Mysql.5.6.17 替换目标:替换掉C3P0,用druid来替换 替换原因: 1、性能方面 hikariCP>druid>tomcat-...
项目所需的jar包,新建lib文件夹,将这些jar包全部添加到路径中
Java JDBC基本入门知识,带增删改查例子,支持MySql数据库,包含事务管理,返回数据格式有类对象和List集合格式。有利于初学者理解Java是怎么连接和操作数据库的,也是慕课网中 JDBC之对面女孩走过来的实例源码,亲...