日期:2014-05-16  浏览次数:20449 次

java数据库连接池简单实现
package cn.lmj.utils;


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.SQLException;
import java.util.LinkedList;
import javax.sql.DataSource;


public class JdbcPool implements DataSource

{

//选用LinkedList方便移除链接

public static LinkedList<Connection> list = new LinkedList<Connection>();

static
{
try
{

Class.forName("com.mysql.jdbc.Driver");

//初始化20个链接

for(int i = 0;i<20;i++)
{

final Connection conn = DriverManager.getConnection("jdbc:mysql:///test","root","root");

//利用jdk动态代理实现增强Connection的close方法

Connection proxy = (Connection) Proxy.newProxyInstance(JdbcPool.class.getClassLoader(),conn.getClass().getInterfaces(),new InvocationHandler()
{
public Object invoke(Object obj, Method m, Object[] arg)
throws Throwable
{
if("close".equals(m.getName()))

{

//加到池中供其它线程访问

list.addLast(conn);
}

return m.invoke(conn,arg);
}
});
list.add(proxy);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}

public PrintWriter getLogWriter() throws SQLException
{
return null;
}


public int getLoginTimeout() throws SQLException
{
// TODO Auto-generated method stub
return 0;
}


public void setLogWriter(PrintWriter arg0) throws SQLException
{
// TODO Auto-generated method stub

}


public void setLoginTimeout(int arg0) throws SQLException
{
// TODO Auto-generated method stub

}


public boolean isWrapperFor(Class<?> arg0) throws S