关于DBCP及使用。纯JDBC架构。

DBCP(DataBase connection pool),数据库连接池

是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。

目前hibernate默认的连接方式就是DBCP,可见其重要性。不过话说hibernate只是一个框架,效率低多了,基础的才是笑到最后的。使用DBCP的连接池可以快速取存连接。进行一系列操作。

不说了,土豆我就直接上代码了。纯JDBC效率肯定比hibernate高哦。说不定哪天hibernate没落了。它只是工具,底层才是王道。

package com.sinoglobal.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Locale; import java.util.ResourceBundle; import org.apache.commons.dbcp.ConnectionFactory; import org.apache.commons.dbcp.DriverManagerConnectionFactory; import org.apache.commons.dbcp.PoolableConnectionFactory; import org.apache.commons.dbcp.PoolingDriver; import org.apache.commons.pool.ObjectPool; import org.apache.commons.pool.impl.GenericObjectPool; @SuppressWarnings("unchecked") public class PoolManager { private static String driver = "net.sourceforge.jtds.jdbc.Driver"; // 驱动 private static String url = ""; // URL private static String name = "sa"; // 用户名 private static String password = ""; // 密码 private static Class driverClass = null; private static ObjectPool connectionPool = null; private static String poolname = ""; private static ResourceBundle rb; /** * 初始化数据源 */ private static synchronized void initDataSource() { if (driverClass == null) { try { driverClass = Class.forName(driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } /** * 装配配置文件 initProperties */ private static void loadProperties() { rb = ResourceBundle.getBundle("config", Locale.getDefault()); driver = rb.getString("jdbc.sql.driverClassName"); url = rb.getString("jdbc.sql.url"); name = rb.getString("jdbc.sql.username"); password = rb.getString("jdbc.sql.password"); poolname = rb.getString("jdbc.sql.poolname"); } /** * 连接池启动 * * @throws Exception */ public static void StartPool() { loadProperties(); initDataSource(); if (connectionPool != null) { ShutdownPool(); } try { connectionPool = new GenericObjectPool(null); ConnectionFactory connectionFactory = new DriverManagerConnectionFactory( url, name, password); new PoolableConnectionFactory(connectionFactory, connectionPool, null, null, false, true); Class.forName("org.apache.commons.dbcp.PoolingDriver"); PoolingDriver driver = (PoolingDriver) DriverManager .getDriver("jdbc:apache:commons:dbcp:"); driver.registerPool(poolname, connectionPool); } catch (Exception e) { e.printStackTrace(); } } /** * 释放连接池 */ public static void ShutdownPool() { try { PoolingDriver driver = (PoolingDriver) DriverManager .getDriver("jdbc:apache:commons:dbcp:"); driver.closePool(poolname); } catch (SQLException e) { e.printStackTrace(); } } /** * 取得连接池中的连接 * * @return */ public static Connection getConnection() { Connection conn = null; if (connectionPool == null) StartPool(); try { conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:" + poolname); } catch (SQLException e) { e.printStackTrace(); } return conn; } /** * 获取连接 getConnection * * @param name * @return */ public static Connection getConnection(String name) { return getConnection(); } /** * 释放连接 freeConnection * * @param conn */ public static void freeConnection(Connection conn) { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 释放连接 freeConnection * * @param name * @param con */ public static void freeConnection(String name, Connection con) { freeConnection(con); } /** * 例子 main * * @param args */ public static void main(String[] args) { try { Connection conn = PoolManager.getConnection(); System.out.println(conn.isClosed()); if (conn != null) { Statement statement = conn.createStatement(); ResultSet rs = statement .executeQuery("select * from test2..log"); int c = rs.getMetaData().getColumnCount(); while (rs.next()) { System.out.println(); for (int i = 1; i <= c; i++) { System.out.print(rs.getObject(i)); } } rs.close(); } PoolManager.freeConnection(conn); } catch (SQLException e) { e.printStackTrace(); } } }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值