`
myworkfirst
  • 浏览: 44749 次
文章分类
社区版块
存档分类
最新评论

c3p0数据库连接池问题

阅读更多
由于以前做的项目没用mysql是用自己的连接池. 新启一个工程用到mysql,mysql对于连接超过8小时,就会断开连接. 在网上查了下,说c3p0可以解决该问题. 找了点资料,配置后写代码测试,发觉c3p0也并没有提高效率,难道是我代码写错了. 因为c3p0每次都得释放连接,感觉用不用作用不太大.

import java.beans.PropertyVetoException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.rowset.CachedRowSet;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.sun.rowset.CachedRowSetImpl;
import com.zhongwei.connectionpool.ConnectionPool;


public class ConnectionManager
{
    private static ConnectionManager instance;
    
    private static ComboPooledDataSource dataSource;
    
    private ConnectionManager() throws IOException, SQLException,
            PropertyVetoException
    {
        
        Properties p = new Properties();
        
        p.load(this.getClass().getResourceAsStream("c3p0.properties"));
        
        dataSource = new ComboPooledDataSource();
        
        dataSource.setProperties(p);
        
        System.out.println(p.getProperty("password"));
        
        dataSource.setUser(p.getProperty("user"));
        dataSource.setPassword(p.getProperty("password"));
        dataSource.setJdbcUrl(p.getProperty("jdbcUrl"));
        dataSource.setDriverClass(p.getProperty("driverClass"));
        dataSource.setInitialPoolSize(Integer.valueOf(p.getProperty("initialPoolSize")));
        dataSource.setMinPoolSize(Integer.valueOf(p.getProperty("minPoolSize")));
        dataSource.setMaxPoolSize(Integer.valueOf(p.getProperty("maxPoolSize")));
        dataSource.setMaxStatements(Integer.valueOf(p.getProperty("maxStatements")));
        dataSource.setMaxIdleTime(Integer.valueOf(p.getProperty("maxIdleTime")));
        dataSource.setPreferredTestQuery(p.getProperty("preferredTestQuery"));
        dataSource.setIdleConnectionTestPeriod(Integer.valueOf(p.getProperty("idleConnectionTestPeriod")));
        dataSource.setTestConnectionOnCheckout(Boolean.valueOf(p.getProperty("testConnectionOnCheckout")));
        dataSource.setTestConnectionOnCheckin(Boolean.valueOf(p.getProperty("testConnectionOnCheckin")));
        dataSource.setAcquireIncrement(Integer.valueOf(p.getProperty("acquireIncrement")));
        dataSource.setAcquireRetryAttempts(Integer.valueOf(p.getProperty("acquireRetryAttempts")));
        dataSource.setAcquireRetryDelay(Integer.valueOf(p.getProperty("acquireRetryDelay")));
        dataSource.setAutomaticTestTable(p.getProperty("automaticTestTable"));
        dataSource.setCheckoutTimeout(Integer.valueOf(p.getProperty("checkoutTimeout")));
        dataSource.setAutoCommitOnClose(Boolean.valueOf(p.getProperty("autoCommitOnClose")));
        
    }
    
    public static final ConnectionManager getInstance()
    {
        if (instance == null)
        {
            try
            {
                instance = new ConnectionManager();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
        return instance;
    }
    
    public synchronized final Connection getConnection()
    {
        Connection connection = null;
        
        try
        {
            connection = dataSource.getConnection();
            
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return connection;
    }
    
 
    public static void main(String[] args) throws Exception
    {
         System.out.println("开始使用连接池...");
      
         PreparedStatement pst = null;
         
         for(int i=0;i<10;i++)
         {
             long beginTime = System.currentTimeMillis();
             
             ConnectionManager inManager = ConnectionManager.getInstance();
             
             Connection conn = inManager.getConnection(); 
             
             try
             {
                 pst = conn.prepareStatement("select * from tb_smsqueue");
                 
                 

                     ResultSet rs = pst.executeQuery();
                     rs.close();
             }
             catch (Exception e)
             {
                 e.printStackTrace();
             }
             finally
             {
                 try
                 {
                     //这里每次要释放连接,用不用连接池有什么作用?
                     if(pst != null)
                     {
                         pst.close();
                         conn.close();
                     }
                 }
                 catch (Exception e)
                 {
                     e.printStackTrace();
                 }
             }
             long endTime = System.currentTimeMillis();
             System.out.println("第" + (i + 1) + "次执行花费时间为:" + (endTime - beginTime));
             
         }
}



properties就不贴出来了
分享到:
评论

相关推荐

    c3p0数据库连接池

    **c3p0数据库连接池详解** c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0的主要功能是管理数据库连接,通过复用已存在的连接来提高数据库访问效率,减少系统资源...

    C3P0数据库连接池

    C3P0数据库连接池和jar包,因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒),连接就会被自动释放掉。而每次新建连接都需要140毫秒左右的时间,所以耗费时间比较多。若使用C3P0连接池来池化...

    C3P0数据库连接池驱动.zip

    数据库连接池的基本原理就是为数据库建立一个缓冲池。在缓冲池中先创建指定数量的数据库连接,当有连接请求时就从缓冲池中取出处于“空闲”状态的连接,并将此连接标记为“忙碌”,直到该请求进程结束后,它所使用的...

    数据库连接池c3p0jar包

    总的来说,C3P0作为一款成熟的数据库连接池,对于Java开发者来说,是一个值得信赖的工具,可以帮助我们更有效地管理和使用数据库连接,提升应用程序的性能和可靠性。在实际项目中,根据具体需求合理配置C3P0,可以更...

    c3p0数据库连接池案例

    **c3p0数据库连接池案例** 在Java开发中,数据库连接池是管理数据库连接的重要工具,它能够有效地提高数据库操作的效率并节省系统资源。C3P0是一款开源的数据库连接池组件,由Maurice Priess创建,被广泛应用于各种...

    C3P0数据库连接池jar包(完整版)

    C3P0数据库连接池是Java开发中常用的一个开源组件,它主要用于管理数据库连接,以提高应用程序处理数据库的效率和性能。C3P0是由Mithral Software公司开发的,其全称为Comerica Commercial Connection Pool,是一款...

    c3p0数据库连接池架包及源码

    C3P0是一个开源的Java数据库连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。这个压缩包包含了C3P0的0.9.5.2版本,以及相关的依赖库。下面将详细介绍C3P0的功能、工作原理以及如何使用。 C3P0...

    c3p0数据库连接池示例

    **c3p0数据库连接池**是Java应用中广泛使用的第三方数据库连接管理工具,它能够有效地管理和优化数据库连接,提高应用程序的性能和效率。c3p0库通过提供连接池功能,使得数据库连接可以被多个并发请求共享,避免了...

    c3p0数据库连接池所需jar包

    C3P0是一个开源的Java数据库连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java应用程序中,数据库连接池扮演着非常重要的角色,它能够有效地管理数据库连接,提高系统性能,减少数据库资源...

    c3p0数据库连接池jar包

    C3P0数据库连接池是一个开源的Java连接池实现,由Miquel Arroyo创建,主要用于管理和优化数据库连接。在Java应用中,数据库连接的建立、关闭和管理是一个耗时的过程,而C3P0则通过提供连接池功能,提高了数据库操作...

    C3P0数据库连接池jar包

    C3P0数据库连接池是Java开发中常用的一款开源连接池组件,它的全称是com.mchange.v2.c3p0.ComboPooledDataSource。在Java应用中,尤其是在Web应用程序中,C3P0能够有效地管理和优化数据库连接,提高系统的性能和资源...

    数据库连接池C3P0.zip

    在本压缩包“数据库连接池C3P0.zip”中,包含了C3P0数据库连接池的相关jar包以及配置文件,用于帮助开发者集成到他们的Java应用中,特别是与MYSQL数据库配合使用。 C3P0的主要特性包括: 1. **连接池管理**:C3P0...

    C3P0连接池jar包(正式).zip

    C3P0是一个开源的Java数据库连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java应用程序中,数据库连接池扮演着非常重要的角色,它能够有效地管理数据库连接,提高系统性能,减少数据库资源...

    C3p0数据库连接池

    **C3p0数据库连接池**是开源的Java数据库连接池工具,主要用于管理数据库连接,提高应用程序处理数据库的效率。C3p0是由Miquel Arroyo开发的一个轻量级、高性能的连接池实现,它能够帮助Java应用程序在处理数据库...

    数据库连接池c3p0所需jar包

    本文将深入探讨数据库连接池的概念,重点介绍C3P0连接池及其所需的JAR包。 首先,数据库连接池是一种在应用服务器启动时预创建并维护一定数量的数据库连接的机制。这些连接可以被多个并发请求共享,而不是每个请求...

    开源数据库连接池c3p0

    开源数据库连接池c3p0是一款广泛应用于Java后端开发中的数据库连接管理工具,它能够有效地管理和优化数据库连接,提高应用的性能和响应速度。c3p0的主要功能包括连接池的创建、维护以及自动回收资源,使得多个并发...

Global site tag (gtag.js) - Google Analytics