请推荐一本关于怎么实现数据库连接池的好书 上网找了一堆资料,恕本人比较愚钝,看不懂也不愿看那些blog,想周末去买一本写的明白的书,高手们能否推荐一下?感激不尽。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 介绍一个网页:http://java.sun.com/developer/onlineTraining/Programming/JDCBook/conpool.html再介绍一个:http://java-source.net/open-source/connection-pools最后介绍一本书:http://pdf.coreservlets.com/CSAJSP-Chapter18.pdf 好像没有这种书,哪会用一本书来介绍连接池的,根本不可能的,夏昕的《深入浅出Hibernate》中对连接池有相当的介绍,找个电子版的看看就可以了。连接池要考虑的东西很多,要实现的话没有那么简单的。里面涉及很多的东西。连接池的原理基本上就是使用一个集合作为池,里面存放了多个打开的Connection,调用某个方法时取出一个,若里面没有了,再有请求来的话,若已经取出的连接正好是池的最大数(可设置的),那就等,等了一段时间还是没有话就抛出异常(或者是继续等)。当用户调用con.close()时,并不是真正地关闭了连接,而是采用动态代理技术重写了close()方法,将其还回池中去。开源的框架有C3P0、DBCP都是相当不错的。写了一个不能称为池的东西,始终只有一个连接,供单机测试用,如果再使用一个集合作为池的话,再考虑一些并发操作,就基本上可以实现一个简陋的了。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 com.util.DatabaseUtil;public class ConnectionFactory { private static Connection con = null; private ConnectionFactory() { } /** * 采用单例模式的连接工厂 * * @return * @throws SQLException */ public synchronized static Connection getConnection() throws SQLException { if (con == null || con.isClosed()) { try { Class.forName(DatabaseUtil.getDriver()); String url = DatabaseUtil.getUrl(); String username = DatabaseUtil.getUsername(); String password = DatabaseUtil.getPassword(); con = DriverManager.getConnection(url, username, password); ConnectionHandler conHandler = new ConnectionHandler(); con = conHandler.bind(con); } catch (ClassNotFoundException e) { e.printStackTrace(); } } return con; }}/** * 利用动态代理,在调用 close() 时并不真正的关闭 Connection, * 便于重用,在单机用户中始终只存在一个 Connection,提高连接速度 * @author Administrator */class ConnectionHandler implements InvocationHandler { private Connection con = null; public Connection bind(Connection connection) { con = connection; Connection conProxy = (Connection)Proxy.newProxyInstance( connection.getClass().getClassLoader(), connection.getClass().getInterfaces(), this ); return conProxy; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object obj = null; if(!method.getName().equals("close")) { obj = method.invoke(con, args); } return obj; }} 关于java写的客户端启动问题 一个图形化界面 二维数组排序,代码给大家研究一下 按钮的处理率很长,如何显示友情提示 关于几个程序的整合,请各位大侠多多关照。急! 大家好,我有一个问题想请教一下 想找些代码研习一下,大家给点意见,有哪些适合菜鸟的代码? 初學JBUILDER,做了一個Application(訪問數据庫的)打包成.JAR,在本地可以用命令行運行,如何發布到其他計算机,需要那些環境? 请问如何解决jbuilder4.0中的could not create JVM问题? 求大神解答这个构造方法,有点不明白。 问一个字符串分割,取得问题 java
http://java.sun.com/developer/onlineTraining/Programming/JDCBook/conpool.html再介绍一个:
http://java-source.net/open-source/connection-pools最后介绍一本书:
http://pdf.coreservlets.com/CSAJSP-Chapter18.pdf
夏昕的《深入浅出Hibernate》中对连接池有相当的介绍,找个
电子版的看看就可以了。连接池要考虑的东西很多,要实现的话没有那么简单的。里面涉及
很多的东西。连接池的原理基本上就是使用一个集合作为池,里面存放了多个打开的Connection,
调用某个方法时取出一个,若里面没有了,再有请求来的话,若已经取出的连接正好是
池的最大数(可设置的),那就等,等了一段时间还是没有话就抛出异常(或者是继续等)。
当用户调用con.close()时,并不是真正地关闭了连接,而是采用动态代理技术重写了close()
方法,将其还回池中去。开源的框架有C3P0、DBCP都是相当不错的。写了一个不能称为池的东西,始终只有一个连接,供单机测试用,如果再使用一个集合作为池的话,
再考虑一些并发操作,就基本上可以实现一个简陋的了。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 com.util.DatabaseUtil;public class ConnectionFactory { private static Connection con = null; private ConnectionFactory() {
} /**
* 采用单例模式的连接工厂
*
* @return
* @throws SQLException
*/
public synchronized static Connection getConnection() throws SQLException {
if (con == null || con.isClosed()) {
try {
Class.forName(DatabaseUtil.getDriver());
String url = DatabaseUtil.getUrl();
String username = DatabaseUtil.getUsername();
String password = DatabaseUtil.getPassword();
con = DriverManager.getConnection(url, username, password);
ConnectionHandler conHandler = new ConnectionHandler();
con = conHandler.bind(con);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return con;
}
}/**
* 利用动态代理,在调用 close() 时并不真正的关闭 Connection,
* 便于重用,在单机用户中始终只存在一个 Connection,提高连接速度
* @author Administrator
*/
class ConnectionHandler implements InvocationHandler {
private Connection con = null;
public Connection bind(Connection connection) {
con = connection;
Connection conProxy = (Connection)Proxy.newProxyInstance(
connection.getClass().getClassLoader(),
connection.getClass().getInterfaces(),
this
);
return conProxy;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object obj = null;
if(!method.getName().equals("close")) {
obj = method.invoke(con, args);
}
return obj;
}
}