使用JAVA中的动态代理实现数据库连接池
发布时间:2019-10-07 编辑:jiaochengji.com
教程集为您提供使用JAVA中的动态代理实现数据库连接池等资源,欢迎您收藏本站,我们将为您提供最新的使用JAVA中的动态代理实现数据库连接池资源
第一:改变了用户使用习惯,增加了用户的使用难度。
首先我们来看看一个正常的数据库操作过程:
int executeSQL(String sql) throws SQLException
{
Connection conn = getConnection(); //通过某种方式获取数据库连接
PreparedStatement ps = null;
int res = 0;
try{
ps = conn.prepareStatement(sql);
res = ps.executeUpdate();
}finally{
try{
ps.close();
}catch(Exception e){}
try{
conn.close();//
}catch(Exception e){}
}
return res;
}
使用者在用完数据库连接后通常是直接调用连接的方法close来释放数据库资源,如果用我们前面提到的连接池的实现方法,那语句conn.close()将被某些特定的语句所替代。
第二:使连接池无法对之中的所有连接进行独占控制。由于连接池不允许用户直接调用连接的close方法,一旦使用者在使用的过程中由于习惯问题直接关闭了数据库连接,那么连接池将无法正常维护所有连接的状态,考虑连接池和应用由不同开发人员实现时这种问题更容易出现。
综合上面提到的两个问题,我们来讨论一下如何解决这两个要命的问题。
首先我们先设身处地的考虑一下用户是想怎么样来使用这个数据库连接池的。用户可以通过特定的方法来获取数据库的连接,同时这个连接的类型应该是标准的java.sql.Connection。用户在获取到这个数据库连接后可以对这个连接进行任意的操作,包括关闭连接等。
通过对用户使用的描述,怎样可以接管Connection.close方法就成了我们这篇文章的主题。
为了接管数据库连接的close方法,我们应该有一种类似于钩子的机制。例如在Windows编程中我们可以利用Hook API来实现对某个Windows API的接管。在JAVA中同样也有这样一个机制。JAVA提供了一个Proxy类和一个InvocationHandler,这两个类都在java.lang.reflect包中。我们先来看看SUN公司提供的文档是怎么描述这两个类的。
您可能感兴趣的文章:
使用JAVA中的动态代理实现数据库连接池
用连接池提高Servlet访问数据库的效率
一种实现数据库连接池的方法(1)
数据库连接缓冲池
一种实现数据库连接池的方法(2)
用连接池提高Servlet访问数据库的效率 (-)
JDBC Connection Pool
php和java有什么区别
mysql driver的bug的深入分析
数据库中的长连接和短连接区别分析
上一篇:一个连接池的例子(说明)
下一篇:Java数据报编程之单播
[关闭]