c3p0数据库连接池问题

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


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就不贴出来了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值