java 利用c3p0管理数据库连接池

数据库连接池类,用于获取数据库连接。利用单例模式保证所有的连接都只通过一个连接池管理。

package com.mousewheel.dbcon;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DBPool {

    private static DBPool instance;

    private ComboPooledDataSource dataSource;

    static{
        instance = new DBPool();
    }

    private DBPool() {
        try {
            dataSource = new ComboPooledDataSource();
            Properties prop = new Properties();
            InputStream in = DBPool.class.getClassLoader().getResourceAsStream("db.properties");
            prop.load(in);

            dataSource.setDriverClass(prop.getProperty("jdbcdriver"));
            dataSource.setJdbcUrl(prop.getProperty("url"));
            dataSource.setUser(prop.getProperty("username"));
            dataSource.setPassword(prop.getProperty("password"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static DBPool getInstance(){
        return instance;
    }

    public Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }
}

DBUtil类,包装DBPool,简化使用

package com.mousewheel.dbcon;

import java.sql.Connection;
import java.sql.SQLException;

public class DbUtil {
    public static Connection getConnection() throws SQLException {
        DBPool pool = DBPool.getInstance();
        return pool.getConnection();
    }
}

测试代码,和不使用连接池的情况做对比

package com.mousewheel.dbcon;

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

import java.util.Properties;
import java.io.InputStream;

import com.mousewheel.dbcon.DbUtil;

 class App {
    public static void main(String[] args) {
        // use c3p0 connection pool
        try {
            for (int i = 0; i < 100; i++) {
                long beginTime = System.currentTimeMillis();
                Connection con = DbUtil.getConnection();
                // 执行查询语句
                String sql = "select * from student";
                PreparedStatement ps = con.prepareStatement(sql);
                ResultSet rs = ps.executeQuery();
                while (rs.next()) {
                    // System.out.println(rs.getString(1));
                }
                con.close();
                long endTime = System.currentTimeMillis();
                System.out.println(String.format("第%s次,%s", i, (endTime - beginTime)));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        // jdbc without using conection pool
        try {
            for (int i = 0; i < 100; i++) {
                long beginTime = System.currentTimeMillis();
                Properties prop = new Properties();
                InputStream in = App.class.getClassLoader().getResourceAsStream("db.properties");
                prop.load(in);
                Class.forName(prop.getProperty("jdbcdriver"));

                Connection con = DriverManager.getConnection(prop.getProperty("url"), prop.getProperty("username"),
                        prop.getProperty("password"));

                String sql = "select * from student";
                PreparedStatement ps = con.prepareStatement(sql);
                ResultSet rs = ps.executeQuery();
                while (rs.next()) {
                    // System.out.println(rs.getString(1));
                }
                con.close();
                long endTime = System.currentTimeMillis();
                System.out.println(String.format("第%s次,%s", i, (endTime - beginTime)));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
时间: 2024-10-12 16:25:15

java 利用c3p0管理数据库连接池的相关文章

详解C3P0(数据库连接池)

一.基本定义 C3P0是一个开源的JDBC连接池,它实现了数据源与JNDI绑定,支持JDBC3规范和实现了JDBC2的标准扩展说明的Connection和Statement池的DataSources对象. 即将用于连接数据库的连接整合在一起形成一个随取随用的数据库连接池(Connection pool). 二.使用C3P0(数据库连接池)的必要性 当我们在进行基于数据库的web程序开发时,我们可以先在主程序(如Servlet.Bean)中通过JDBC中的DriverManager建立数据库连接,

在Java中开源的数据库连接池

在Java中开源的数据库连接池有以下几种 : 1, C3P0 C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象. https://github.com/swaldman/c3p0 2,Proxool 这是一个Java SQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装.可以非常简单的移植到现存的代码中.完全可配

2018-07-24期 Java动态代理实现数据库连接池

package cn.sjq.proxy.ds.pool; import java.io.PrintWriter; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLExcep

在JAVA中实现JDBC数据库连接池

[转自e良师益友网]Java程序员都很羡慕Windows ADO ,只需要new Connection 就可以直接从数据库连接池中返回Connection.并且 ADO Connection 是线程安全的,多个线程可以共用一个Connection,所以ASP程序一般都把getConnection 放在 Global.asa 文件中,在 IIS 启动时建立数据库连接.ADO 的Connection 和Result 都有很好的缓冲,并且很容易使用.推荐学习尚硅谷JDBC视频教程. 其实我们可以自己写

Java中Semaphore(信号量) 数据库连接池

计数信号量用来控制同时访问某个特定资源的操作数或同时执行某个指定操作的数量 A counting semaphore.Conceptually, a semaphore maintains a set of permits. Each acquire blocks if necessary until a permit is available, and then takes it. Each release adds a permit, potentially releasing a bloc

【java】简单实现数据库连接池

一直在想java事务是怎么实现的,在原声jdbc的时候级别下,我们可以通过关掉autocommit 然后再手动commit.但是项目开发中基本上是看不见conection的.所以自己决定简单实现框架的一点皮毛功能.首先就是数据库连接池了 1. 先定义一个接口 import java.sql.Connection; public interface IConnectionPool { /** * 获取一个连接 * @return */ Connection getConnection(); /**

C3P0:数据库连接池技术

步骤: 1. 导入jar包 (两个) c3p0-0.9.5.2.jar .mchange-commons-java-0.2.12.jar , * 不要忘记导入数据库驱动jar包 2. 定义配置文件: * 名称: c3p0.properties 或者 c3p0-config.xml * 路径:直接将文件放在src目录下即可. 3. 创建核心对象 数据库连接池对象 ComboPooledDataSource 4. 获取连接: getConnection * 代码: //1.创建数据库连接池对象 Da

【java servlet】在java servlet中配置数据库连接池的配置(在server.xml)

<Context path="/" docBase="" debug="0"> <!-- name:给出数据源设置名字: auth:表示该数据源是由谁管理:type:表示类型--> <Resource name="zhaoyan" auth="Container" type="javax.sql.DataSource"/> <ResourcePa

java学习笔记—第三方数据库连接池包1(29)

第一步:导入dbcp包 第二步:通过核心类连接数据 BasicDataSource它是javax.sql.DataSrouce的子类. 一个工具类:BasicDataSourceFactory. 手工通过代码连接数据库: BasicDataSource ds = new BasicDataSource(); //设置driver ds.setDriverClassName("com.mysql.jdbc.Driver"); //设置url ds.setUrl("jdbc:my