JAVA教程之一种完成数据库毗连池的办法(1)
但是对于JAVA技术类的学习,我觉得大课堂反而会影响自身独立思考的过程,因为上课的时候,老师讲课的速度很快为了不遗漏要点,通常会仔细的听,数据|数据库|数据库毗连数据库毗连池在编写使用服务是常常必要用到的模块,太甚频仍的毗连数据库对服务功能来说是一个瓶颈,利用缓冲池手艺能够来打消这个瓶颈。我们能够在互联网上找到良多关于数据库毗连池的源程序,可是都发明如许一个配合的成绩:这些毗连池的完成办法都分歧水平地增添了与利用者之间的耦合度。良多的毗连池都请求用户经由过程其划定的办法猎取数据库的毗连,这一点我们能够了解,究竟今朝一切的使用服务器取数据库毗连的体例都是这类体例完成的。可是别的一个配合的成绩是,它们同时不同意利用者显式的挪用Connection.close()办法,而必要用其划定的一个办法来封闭毗连。这类做法有两个弱点:第一:改动了用户利用习气,增添了用户的利用难度。
起首我们来看看一个一般的数据库操纵历程:
intexecuteSQL(Stringsql)throwsSQLException
{
Connectionconn=getConnection();//经由过程某种体例猎取数据库毗连
PreparedStatementps=null;
intres=0;
try{
ps=conn.prepareStatement(sql);
res=ps.executeUpdate();
}finally{
try{
ps.close();
}catch(Exceptione){}
try{
conn.close();//
}catch(Exceptione){}
}
returnres;
}
利用者在用完数据库毗连后一般是间接挪用毗连的办法close来开释数据库资本,假如用我们后面提到的毗连池的完成办法,那语句conn.close()将被某些特定的语句所替换。
第二:使毗连池没法对当中的一切毗连举行独有把持。因为毗连池不同意用户间接挪用毗连的close办法,一旦利用者在利用的过程当中因为习气成绩间接封闭了数据库毗连,那末毗连池将没法一般保护一切毗连的形态,思索毗连池和使用由分歧开辟职员完成时这类成绩更简单呈现。
综合下面提到的两个成绩,我们来会商一下怎样办理这两个要命的成绩。
起首我们先设身处地的思索一下用户是想怎样来利用这个数据库毗连池的。用户能够经由过程特定的办法来猎取数据库的毗连,同时这个毗连的范例应当是尺度的java.sql.Connection。用户在猎取到这个数据库毗连后能够对这个毗连举行恣意的操纵,包含封闭毗连等。
经由过程对用户利用的形貌,如何能够接受Connection.close办法就成了我们这篇文章的主题。
为了接受数据库毗连的close办法,我们应当有一品种似于钩子的机制。比方在Windows编程中我们能够使用HookAPI来完成对某个WindowsAPI的接受。在JAVA中一样也有如许一个机制。JAVA供应了一个Proxy类和一个InvocationHandler,这两个类都在java.lang.reflect包中。我们先来看看SUN公司供应的文档是怎样形貌这两个类的。
publicinterfaceInvocationHandler
InvocationHandleristheinterfaceimplementedbytheinvocationhandlerofaproxyinstance.
Eachproxyinstancehasanassociatedinvocationhandler.
Whenamethodisinvokedonaproxyinstance,
themethodinvocationisencodedanddispatchedtotheinvokemethodofitsinvocationhandler.
SUN的API文档中关于Proxy的形貌良多,这里就不排列出来。经由过程文档对接口InvocationHandler的形貌我们能够看到当挪用一个Proxy实例的办法时会触发Invocationhanlder的invoke办法。从JAVA的文档中我们也同时懂得到这类静态代办署理机制只能接受接口的办法,而对一样平常的类有效,思索到java.sql.Connection自己也是一个接口由此就找到懂得决怎样接受close办法的前途。
起首,我们先界说一个数据库毗连池参数的类,界说了数据库的JDBC驱动程序类名,毗连的URL和用户名口令等等一些信息,该类是用于初始化毗连池的参数,详细界说以下:
publicclassConnectionParamimplementsSerializable
{
privateStringdriver;//数据库驱动程序
privateStringurl;//数据毗连的URL
privateStringuser;//数据库用户名
privateStringpassword;//数据库暗码
privateintminConnection=0;//初始化毗连数
privateintmaxConnection=50;//最年夜毗连数
privatelongtimeoutValue=600000;//毗连的最年夜余暇工夫
privatelongwaitTime=30000;//取毗连的时分假如没有可用毗连最年夜的守候工夫
在1995年5月23日以“Java”的名称正式发布了。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 Java 编程语言的风格十分接近C、C++语言。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
页:
[1]