免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1671 | 回复: 0
打印 上一主题 下一主题

JAVA中使用DBCP做数据库连接池 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-28 23:00 |只看该作者 |倒序浏览
    自己还没完全理解,第一次用,但是代码可以用了,放上来,要不到时又不知丢那去,找不着了。代码中用的数据库连接,根据不同的数据库,应该把不同的驱动加到工程里,这里用的是postgresql,可以到postgresql官网下载JAVA驱动包,最新的好象是8.1的。
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.DriverManager;
import org.apache.log4j.Logger;

import org.apache.commons.pool.ObjectPool;
import org.apache.commons.pool.impl.GenericObjectPool;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;
import org.apache.commons.dbcp.ConnectionFactory;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.PoolingDriver;

/**
* ݿ数据库连接缓冲池
*/
public class DBPool {
    private final static Logger logger = Logger.getLogger(DBPool.class);

    private static String dbIP = "192.168.0.132";
     
    private static String dbJdbc = "jdbc:postgresql://" + dbIP + "/sample";

    private static String dbUser = "sample";

    private static String dbPwd = "sample";

    private static Class driverClass = null;

    private static ObjectPool connectionPool = null;

    public DBPool() {
    }

    /**
     * 初始化数据源
     */
    private static synchronized void initDataSource() {
        //驱动数据源
        if (driverClass == null) {
            try {
                driverClass = Class.forName("org.postgresql.Driver");
            } catch (ClassNotFoundException e) {
                logger.error(e.getMessage(), e);
            }
        }
    }

    /**
     * 连接池启动
     * @throws Exception
     */
    public static void StartPool() {
        // 记录连接源的字符串
        logger.info(dbJdbc);

        // 初始化数据源
        initDataSource();

        // 如果连接池为空
        if (connectionPool != null) {
            ShutdownPool();
        }

        try {
            connectionPool = new GenericObjectPool(null);
            ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(
                    dbJdbc, dbUser, dbPwd);
            PoolableConnectionFactory poolableConnectionFactory = 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("dbpool", connectionPool);
            
            logger.info("Init Pool for Database Connection Succees.");
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
    }

    /**
     * 释放连接池
     */
    public static void ShutdownPool() {
        try {
            PoolingDriver driver = (PoolingDriver) DriverManager
                    .getDriver("jdbc:apache:commons:dbcp:");
            driver.closePool("dbpool");
        } catch (SQLException e) {
            logger.error(e.getMessage(), e);
        }
    }

    /**
     * 打印连接池状态
     */
    public static String GetPoolStats() {

        StringBuffer stat = new StringBuffer();
        try {
            PoolingDriver driver = (PoolingDriver) DriverManager
                    .getDriver("jdbc:apache:commons:dbcp:");
            ObjectPool connectionPool = driver.getConnectionPool("dbpool");
            
            stat.append("-- Active Connection: ");
            stat.append(connectionPool.getNumActive());
            stat.append(" ,");
            stat.append("Free Connection: ");
            stat.append(connectionPool.getNumIdle());
            stat.append(" . --");
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
        return stat.toString();
    }

    /**
     * 取得连接池中的连接
     * @return
     */
    public static Connection getDbConnection() {
        Connection conn = null;
        if(connectionPool == null)
            StartPool();
        try {
            conn = DriverManager
                    .getConnection("jdbc:apache:commons:dbcp:dbpool");
        } catch (SQLException e) {
            logger.error(e.getMessage(), e);
        }
        return conn;
    }

}
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/17899/showart_178190.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP