之漫谈使用ThreadLocal改进你的层次的划分_第1页
之漫谈使用ThreadLocal改进你的层次的划分_第2页
之漫谈使用ThreadLocal改进你的层次的划分_第3页
之漫谈使用ThreadLocal改进你的层次的划分_第4页
之漫谈使用ThreadLocal改进你的层次的划分_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、什么么是ThhreaadLoocall早在JDDK 11.2的的版本中中就提供供javva.llangg.ThhreaadLoocall,ThrreaddLoccal为为解决多多线程程程序的并并发问题题提供了了一种新新的思路路。使用用这个工工具类可可以很简简洁地编编写出优优美的多多线程程程序。ThreeadLLocaal很容容易让人人望文生生义,想想当然地地认为是是一个“本地线线程”。其实实,ThhreaadLoocall并不是是一个TThreead,而而是Thhreaad的局局部变量量,也许许把它命命名为TThreeadLLocaalVaariaablee更容易易让人理理解一些些。当使用

2、TThreeadLLocaal维护护变量时时,ThhreaadLoocall为每个个使用该该变量的的线程提提供独立立的变量量副本,所所以每一一个线程程都可以以独立地地改变自自己的副副本,而而不会影影响其它它线程所所对应的的副本。从线程的的角度看看,目标标变量就就象是线线程的本本地变量量,这也也是类名名中“LLocaal”所所要表达达的意思思。线程局部部变量并并不是JJavaa的新发发明,很很多语言言(如IIBM IBMM XLL FOORTRRAN)在在语法层层面就提提供线程程局部变变量。在在Javva中没没有提供供在语言言级支持持,而是是变相地地通过TThreeadLLocaal的类类提供支

3、支持。所以,在在Javva中编编写线程程局部变变量的代代码相对对来说要要笨拙一一些,因因此造成成线程局局部变量量没有在在Javva开发发者中得得到很好好的普及及。ThreeadLLocaal的接接口方法法ThreeadLLocaal类接接口很简简单,只只有4个方法法,我们们先来了了解一下下:vvoidd seet(OObjeect vallue)设置当前前线程的的线程局局部变量量的值。ppubllic Objjectt geet()该方法返返回当前前线程所所对应的的线程局局部变量量。ppubllic voiid rremoove()将当前线线程局部部变量的的值删除除,目的的是为了了减少内内存的

4、占占用,该该方法是是JDKK 5.0新增增的方法法。需要要指出的的是,当当线程结结束后,对对应该线线程的局局部变量量将自动动被垃圾圾回收,所所以显式式调用该该方法清清除线程程的局部部变量并并不是必必须的操操作,但但它可以以加快内内存回收收的速度度。pprottectted ObjjecttiniitiaalVaaluee()返回该线线程局部部变量的的初始值值,该方方法是一一个prroteecteed的方方法,显显然是为为了让子子类覆盖盖而设计计的。这这个方法法是一个个延迟调调用方法法,在线线程第11次调用用gett()或或sett(Obbjecct)时时才执行行,并且且仅执行行1次。Thhre

5、aadLoocall中的缺缺省实现现直接返返回一个个nulll。值得一提提的是,在在JDKK5.00中,ThhreaadLoocall已经支支持泛型型,该类类的类名名已经变变为ThhreaadLoocall。APII方法也也相应进进行了调调整,新新版本的的APII方法分分别是vvoidd seet(TT vaaluee)、T gget()以及及T iinittiallVallue()。一、来看看一个实实际案例例2.1同一Seerviice方方法中调调用多个个Daoo方法可以看到到,我们们有一个个Serrvicce方法法,在该该Serrvicce方法法中调用用多个DDao方方法,所所有在该该Se

6、rrvicce方法法中的的的Daoo都处于于同一事事务中。该Serrvicce方法法结束后后,提交交事务;该Serrvicce方法法中有任任何错,回回滚事务务;2.2传统的的做法来看下面面这段伪伪代码Servvicee层代码码:publlic voiid sservviceeMetthodd()Connnecttionn coonn=nulll;tryConnnecttionn coonn=gettConnnecctioon();connn.seetAuutoCCommmit(fallse);Dao11 daao1=neww Daao1(connn);dao11.dooSommethhingg

7、();Dao22 daao2=neww Daao2(connn);dao22.dooSommethhingg();Dao33 daao3=neww Daao3(connn);dao33.dooSommethhingg(); cconnn.coommiit();cattch(Exccepttionn e) tryy connn.rrolllbacck();cattch(Exccepttionn exx)finnalllytryconnn.seetAuutoCCommmit(truue);cattch(Exccepttionn e) tryy if(connn!=nulll) connn.cclo

8、sse(); connn=nnulll;cattch(Exccepttionn e)每个Daao层的的代码:Classs DDao11privvatee Coonneectiion connn=nnulll;publlic Daoo1(CConnnecttionn coonn) thiis.cconnn=coonn;publlic voiid ddoSoometthinng() PreeparredSStattemeent psttmt=nulll; tryy psstmtt=coonn.preeparredSStattemeent(sqll); psstmtt.exxecuute cattc

9、h(Exccepttionn e) logg.errrorr(e,”Exxeceeptiion occcurrred in Daoo1.ddoSoometthinng():”+e.ggetMMesssagee,e);finnallly tryy iff(psstmtt!=nnulll) ppstmmt.cclosse(); ppstmmt=nnulll; caatchh(Exxcepptioon ee)如果我一一个Seerviice方方法有调调用一堆堆daoo方法,先先不说这这样写首首先破坏坏了OOOP的封封装性原原则,如如果有一一个daao多关关了一个个connn,那那就会导导致其它它的da

10、ao得到到的coonn为为nulll,这这种事在在这样的的写法下下由其当当你还有有业务逻逻辑混合合在一起起时很容容易发生生。笔者曾经经遇见过过2个项目目,出现现outt off meemorry或者者是coonneectiion poool hhas beeen lleakkagee,经查查代码就就是在每每个daao中多多关或者者在seerviice层层中漏关关,或者者是每个个daoo有自己己的coonnttionnconnn=ggetCConnnecttionn(),然然后还跑跑到Seerviice层层里去关关这个cconnnecttionn(那关关什么,关关个P关!)。当然,如如果你说说你

11、在写写法上绝绝对prromiise绝绝对注意意这样的的问题不不会发生生,但是是我们来来看看下下面的这这种做法法,是否否会比上上面这个个写法更更好呢?2.33 Spprinng中的的做法先来看SSpriing中中的写法法。大家应该该都很熟熟悉Spprinng中的的写法了了,来看看一下它它是怎么么解决的的。Servvicee层publlic voiid sservviceeMetthodd()try /aaop 自动加加入coonneectiion,并并且将cconnn.seetAuutoCCommmit(fallse);dao11.dooSommethhingg();dao22.dooSomme

12、thhingg();dao33.dooSommethhingg();cattch(Exccepttionn e) /aaop 自动加加入roollbbackkfinnallly /aaop自自动加入入connn.ssetAAutooCommmitt(trrue) /aaop 自动加加入coonn.cloose();这边我们们不讲AAOP,因因为用类类反射结结合xmml很容容易将aaop 自动。这这些东西西加入我我们的代代码中去去是不是是?我们们只管写写daoo方法,sservvicee方法,不不需要关关心在哪哪边coommiit哪边边rolllbaack何何时coonneectiion,spr

13、ringg的声明明式事务务会帮我我们负责责,这种种风格我我们称为为“优雅”,各层层间耦合合度极大大程度上上的降低低,封装装性好。因此,我我们可以以总结出出下面这这些好处处: SServvicee层的方方法只管管开启事事务(如如果讲究究点的还还会设一一个Trranssacttionn); 在在该Seerviice层层中的所所有daao使用用该seerviice方方法中开开启的事事务(即即connnecctioon); DDao中中每次只只管geetCuurreentCConnnecttionn(获取取当前的的connnecctioon),与与进行数数据处理理 DDao层层中如果果发生错错误就抛抛

14、回Seerviice层层 SServvicee层中接接到exxcepptioon,在在cattch中rolllbaack,在在tryy未未尾coommiit,在在finnallly块中中关闭整整个coonneectiion。这。就是我我们所说说的ThhreaadLoocall。举个更实实际的例例子再次次来说明明ThrreaddLoccal:我们有33个用户户访问同同一个sservvicee方法,该该serrvicce方法法内有33个daoo方法为为一个完完整事务务,那么么整个wweb容容器内只只因该有有3个connnecctioon,并并且每个个connnecctioon之间间的状态态,彼此此

15、“隔离”。我们下面面一起来来看我们们如何用用代码实实现类似似于Spprinng的这这种做法法。首先,根根据我们们的ThhreaadLoocall的概念念,我们们先声明明一个CConnnecttionnMannageer的类类。2.4利用ThhreaadLoocall制作CoonneectiionMManaagerrpubllic claass ConnnecctioonMaanagger pprivvatee sttatiic TThreeadLLocaal ttl = neew TThreeadLLocaal(); pprivvatee sttatiic CConnnecttionn coo

16、nn = nnulll; ppubllic staaticc vooid BegginTTranns(bboolleann beeginnTraans) thhrowws EExceeptiion if (tll.geet() = nuull | (CConnnecttionn) ttl.gget().isCClossed() connn = SiinglletoonDBBConnnecctioon.ggetIInsttancce().geetCoonneectiion(); connn = neew CConnnecttionnSpyy(coonn); if (beeginnTraans)

17、connn.ssetAAutooCommmitt(faalsee); tl.sett(coonn); ppubllic staaticc Coonneectiion gettConnnecctioon() thhrowws EExceeptiion retturnn (CConnnecttionn) ttl.gget(); ppubllic staaticc vooid cloose() tthroows SQLLExccepttionn tryy (CConnnecttionn) ttl.gget().settAuttoCoommiit(ttruee); ccatcch (Excceptti

18、onn e) (CConnnecttionn) ttl.gget().cloose(); tl.sett(nuull); ppubllic staaticc vooid commmitt() thrrowss SQQLExxcepptioon tryy (CConnnecttionn) ttl.gget().commmitt(); ccatcch (Exccepttionn e) tryy (CConnnecttionn) ttl.gget().settAuttoCoommiit(ttruee); ccatcch (Exccepttionn e) ppubllic staaticc vooid

19、 rolllbaack() tthroows SQLLExccepttionn tryy (CConnnecttionn) ttl.gget().rolllbaack(); ccatcch (Exccepttionn e) tryy (CConnnecttionn) ttl.gget().settAuttoCoommiit(ttruee); ccatcch (Exccepttionn e) 2.5利用ThhreaadLoocall改造Seerviice与与Daoo层Servvicee层(注注意红色色标粗-好粗yeeah,的地方方)packkagee skky.oorg.serrvicce.ii

20、mpll;publlic claass StuudenntSeerviiceIImpll immpleemennts StuudenntSeerviice ppubllic voiid aaddSStuddentt(Sttudeent stdd) tthroows Exccepttionn StuudenntDAAO sstuddenttDAOO = neww SttudeentDDAOIImpll(); ClaassRRoommDAOO cllasssRooomDAAO = neew CClasssRooomDDAOIImpll(); tryy ConnnecctioonMaanagger.

21、BegginTTranns(ttruee);stuudenntDAAO.aaddSStuddentt(sttd);claassRRoommDAOO.aaddSStuddenttClaassRRoomm(sttd.ggetCClasssRooomIId(), sstd.gettsNoo();ConnnecctioonMmmitt(); ccatcch (Exccepttionn e) tryy ConnnecctioonMaanagger.rolllbaack(); ccatcch (Exccepttionn dee) thrrow neww Exxcepptioon(ee); fiinalll

22、y tryy ConnnecctioonMaanagger.cloose(); ccatcch (Exccepttionn e) Lookk,如果果我把上上述标粗粗(没有有加红色色)的地地方,全全部用AAOP的的方式从从这块代代码的外外部“切”进去。是是不是一一个Spprinng里的的Serrvicce方法法就诞生生了?下面来看看一个完完整的例例子2.6使用ThhreaadLoocall分离Seerviice、DAOO层先来看表表结构:T_Sttudeent表表T_CllasssRooom表T_Sttudeent_ClaassRRoomm表需求:很简单,T_ClassRoom表里已经有值了,在

23、插入T_Student表的数据时同时要给这个学生分配一个班级并且插入T_Student_ClassRoom表,这就是一个事务,这两步中有任何一步出错,事务必须回滚。看来工程程的结构构吧:下面开始始放出所所有源代代码:2.6.1 CConnnecttionnMannageer类packkagee skky.oorg.utiil.ddb;impoort javva.ssql.*;publlic claass ConnnecctioonMaanagger pprivvatee sttatiic TThreeadLLocaal ttl = neew TThreeadLLocaal(); pprivva

24、tee sttatiic CConnnecttionn coonn = nnulll; ppubllic staaticc vooid BegginTTranns(bboolleann beeginnTraans) thhrowws EExceeptiion if (tll.geet() = nuull | (CConnnecttionn) ttl.gget().isCClossed() connn = DBBConnnecctioon.ggetIInsttancce().geetCoonneectiion(); connn = neew CConnnecttionnSpyy(coonn);

25、if (beeginnTraans) connn.ssetAAutooCommmitt(faalsee); tl.sett(coonn); ppubllic staaticc Coonneectiion gettConnnecctioon() thhrowws EExceeptiion rretuurn (Coonneectiion) tll.geet(); ppubllic staaticc vooid cloose() tthroows SQLLExccepttionn tryy (CConnnecttionn) ttl.gget().settAuttoCoommiit(ttruee);

26、ccatcch (Exccepttionn e) (CConnnecttionn) ttl.gget().cloose(); tl.sett(nuull); ppubllic staaticc vooid commmitt() thrrowss SQQLExxcepptioon tryy (CConnnecttionn) ttl.gget().commmitt(); ccatcch (Exccepttionn e) tryy (CConnnecttionn) ttl.gget().settAuttoCoommiit(ttruee); ccatcch (Exccepttionn e) ppubl

27、lic staaticc vooid rolllbaack() tthroows SQLLExccepttionn tryy (CConnnecttionn) ttl.gget().rolllbaack(); ccatcch (Exccepttionn e) tryy (CConnnecttionn) ttl.gget().settAuttoCoommiit(ttruee); ccatcch (Exccepttionn e) 2.6.2 DDBCoonneectiion类类packkagee skky.oorg.utiil.ddb;publlic claass DBCConnnecttionn

28、 pprivvatee sttatiic DDBCoonneectiion insstannce = nnulll; pprivvatee sttatiic SStriing driiverrClaassNNamee = nulll; pprivvatee sttatiic SStriing connnecctioonUrrl = nuull; pprivvatee sttatiic SStriing useerNaame = nnulll; pprivvatee sttatiic SStriing passswoord = nnulll; pprivvatee sttatiic CConnn

29、ecttionn coonn = nnulll; pprivvatee sttatiic PPropperttiess jddbcPPropp = nulll; pprivvatee DBBConnnecctioon() pprivvatee sttatiic PPropperttiess geetCoonfiigFrromPPropperttiessFille() thhrowws EExceeptiion Prooperrtiees ppropp = nulll; proop = JddbcPPropperttiess.geetPrropOObjFFrommFille(); retturn

30、n prrop; pprivvatee sttatiic vvoidd innitJJdbccParrameeterrs(PPropperttiess prrop) driiverrClaassNNamee = proop.ggetPProppertty(CConsstannts.DRIIVERR_CLLASSS_NAAME); connnecctioonUrrl = prrop.gettProoperrty(Connstaantss.COONNEECTIION_URLL); useerNaame = ppropp.geetPrropeertyy(Coonsttantts.DDB_UUSERR

31、_NAAME); passswoord = ppropp.geetPrropeertyy(Coonsttantts.DDB_UUSERR_PAASSWWORDD); pprivvatee sttatiic vvoidd crreatteCoonneectiion() tthroows Exccepttionn Claass.forrNamme(ddrivverCClasssNaame); connn = DrriveerMaanagger.gettConnnecctioon(cconnnecttionnUrll, uuserrNamme, passswoord); ppubllic staat

32、icc Coonneectiion gettConnnecctioon() thhrowws EExceeptiion retturnn coonn; ppubllic synnchrroniizedd sttatiic DDBCoonneectiion gettInsstannce()thhrowws EExceeptiion if (innstaancee = nuull) jdbbcPrrop = ggetCConffigFFrommProoperrtieesFiile(); insstannce = nnew DBCConnnecttionn(); iniitJddbcPParaame

33、tterss(jddbcPPropp); creeateeConnnecctioon(); retturnn innstaancee; 2.6.3 JJdbccProoperrtiees类packkagee skky.oorg.utiil.ddb;impoort javva.iio.FFilee;impoort javva.iio.FFileeInpputSStreeam;impoort javva.iio.FFileeNottFouundEExceeptiion;impoort javva.iio.IIOExxcepptioon;impoort javva.iio.IInpuutSttrea

34、am;impoort javva.nnet.URLL;impoort javva.uutill.*;publlic claass JdbbcPrropeertiies pprivvatee sttatiic LLog logggerr = LoggFacctorry.ggetLLog(JdbbcPrropeertiies.claass); ppubllic staaticc Prropeertiies gettProopObbjFrromFFilee() Prooperrtiees oobjPPropp = neww Prropeertiies(); ClaassLLoadder claass

35、LLoadder = TThreead.currrenntThhreaad() .geetCoonteextCClasssLooadeer(); URLL urrl = cllasssLoaaderr.geetReesouurcee(Coonsttantts.JJDBCC_PRROPEERTIIES_FILLE); if (urrl = nnulll) claassLLoadder = CClasssLooadeer.ggetSSysttemCClasssLooadeer(); urll = claassLLoadder.gettRessourrce(Connstaantss.JDDBC_PR

36、OOPERRTIEES_FFILEE); Fille ffilee = neww Fiile(urll.geetFiile(); InpputSStreeam inSStreeam = nnulll; tryy inSStreeam = nnew FilleInnputtStrreamm(fiile); objjProop.lloadd(innStrreamm); ccatcch (FilleNootFoounddExccepttionn e) objjProop = nuull; e.pprinntSttackkTraace(); ccatcch (IOEExceeptiion e) e.p

37、prinntSttackkTraace(); ffinaallyy tryy if (innStrreamm != nuull) innStrreamm.cllosee(); innStrreamm = nulll; ccatcch (Exccepttionn e) retturnn obbjPrrop; 2.6.4 RResoourcce目录录下的jjdbcc.prropeertiiesjdbcc.drriveerCllasssNamme=ccom.myssql.jdbbc.DDrivverjdbcc.daatabbaseeURLL=jddbc:myssql:/llocaalhoost:33

38、006/mmydbb?usseUnnicoode=truue&ccharractterEEncoodinng=uutf88jdbcc.ussernnamee=myysqlljdbcc.paasswwordd=paasswwordd_12.6.5 SStuddenttSerrvicce接口口packkagee skky.oorg.serrvicce;impoort javva.uutill.Liist;impoort javva.uutill.Veectoor;impoort skyy.orrg.bbeann.*;publlic intterffacee SttudeentSServvicee

39、ppubllic voiid aaddSStuddentt(Sttudeent stdd) tthroows Exccepttionn;2.6.6 SStuddenttSerrvicceImmpl类类packkagee skky.oorg.serrvicce.iimpll;impoort javva.uutill.ArrrayyLisst;impoort javva.uutill.Liist;impoort javva.uutill.Veectoor;impoort skyy.orrg.uutill.dbb.CoonneectiionMManaagerr;impoort skyy.orrg.u

40、utill.*;impoort skyy.orrg.bbeann.*;impoort skyy.orrg.ddao.*;impoort skyy.orrg.ddao.imppl.*;impoort skyy.orrg.sservvicee.*;publlic claass StuudenntSeerviiceIImpll immpleemennts StuudenntSeerviice ppubllic voiid aaddSStuddentt(Sttudeent stdd) tthroows Exccepttionn StuudenntDAAO sstuddenttDAOO = neww S

41、ttudeentDDAOIImpll(); ClaassRRoommDAOO cllasssRooomDAAO = neew CClasssRooomDDAOIImpll(); tryy ConnnecctioonMaanagger.BegginTTranns(ttruee); stuudenntDAAO.aaddSStuddentt(sttd); claassRRoommDAOO .aaddSStuddenttClaassRRoomm(sttd.ggetCClasssRooomIId(), sstd.gettsNoo(); ConnnecctioonMmmitt(); ccatcch (Ex

42、ccepttionn e) tryy ConnnecctioonMaanagger.rolllbaack(); ccatcch (Exccepttionn dee) thrrow neww Exxcepptioon(ee); ffinaallyy tryy ConnnecctioonMaanagger.cloose(); ccatcch (Exccepttionn e) 2.6.7 CClasssRooomDDAO接接口packkagee skky.oorg.daoo;impoort javva.uutill.HaashMMap;impoort javva.uutill.Liist;publl

43、ic intterffacee CllasssRooomDAAO ppubllic voiid aaddSStuddenttClaassRRoomm(Sttrinng rroommId, Sttrinng ssNo) thhrowws EExceeptiion;2.6.8 CClasssRooomDDAOIImpll类packkagee skky.oorg.daoo.immpl;impoort javva.ssql.*;impoort javva.uutill.*;impoort skyy.orrg.ddao.ClaassRRoommDAOO;impoort skyy.orrg.uutill.

44、dbb.CoonneectiionMManaagerr;publlic claass ClaassRRoommDAOOImppl iimpllemeentss CllasssRooomDAAO ppubllic voiid aaddSStuddenttClaassRRoomm(Sttrinng rroommId, Sttrinng ssNo) thhrowws EExceeptiion Connnecctioon cconnn = nulll; PreeparredSStattemeent psttmt = nnulll; tryy connn = CoonneectiionMManaager

45、r.geetCoonneectiion(); psttmt = cconnn .ppreppareeStaatemmentt(CllasssRooomDAAOSqql.AADD_STUUDENNT_CCLASSSROOOM); psttmt.settStrringg(1, rooomIId); psttmt.settStrringg(2, sNNo); psttmt.exeecutteUppdatte(); ccatcch (Exccepttionn e) thrrow neww Exxcepptioon(adddStuudenntCllasssRooom: + e.ggetMMesssage

46、e(), e); ffinaallyy tryy if (psstmtt != nuull) psstmtt.cllosee(); psstmtt = nulll; ccatcch (Exccepttionn e) 2.6.9 SStuddenttDAOO接口packkagee skky.oorg.daoo;impoort javva.uutill.*;impoort skyy.orrg.bbeann.Sttudeent;publlic intterffacee SttudeentDDAO ppubllic voiid aaddSStuddentt(Sttudeent stdd) tthroo

47、ws Exccepttionn;2.6.10 StuudenntDAAOImmpl类类packkagee skky.oorg.daoo.immpl;impoort javva.ssql.*;impoort javvax.sqll.*;impoort orgg.appachhe.ccommmonss.looggiing.Logg;impoort orgg.appachhe.ccommmonss.looggiing.LoggFacctorry;impoort skyy.orrg.bbeann.Sttudeent;impoort skyy.orrg.ddao.StuudenntDAAO;impoor

48、t skyy.orrg.uutill.dbb.CoonneectiionMManaagerr;impoort javva.uutill.Liist;impoort javva.uutill.ArrrayyLisst;impoort javva.uutill.Veectoor;impoort javva.ttextt.*;impoort skyy.orrg.uutill.SttrinngUttil;publlic claass StuudenntDAAOImmpl impplemmentts SStuddenttDAOO pprivvatee Loog lloggger = LLogFFactt

49、oryy.geetLoog(tthiss.geetCllasss(); ppubllic voiid aaddSStuddentt(Sttudeent stdd) tthroows Exccepttionn Connnecctioon cconnn = nulll; PreeparredSStattemeent psttmt = nnulll; tryy connn = CoonneectiionMManaagerr.geetCoonneectiion(); psttmt = cconnn.prrepaareSStattemeent(StuudenntDAAOSqql.AADD_STUUDEN

50、NT); psttmt.settStrringg(1, sttd.ggetssNo(); psttmt.settStrringg(2, sttd.ggetssNamme(); psttmt.settStrringg(3, sttd.ggetssAgee(); psttmt.settStrringg(4, sttd.ggetGGendder(); psttmt.settDatte(55, SStriingUUtill.coonveertSStrTToDaate(stdd.geetSbbirtth(); psttmt.exeecutteUppdatte(); ccatcch (Exccepttio

51、nn e) thrrow neww Exxcepptioon(adddStuudennt: + e.ggetMMesssagee(), e); ffinaallyy tryy if (psstmtt != nuull) psstmtt.cllosee(); psstmtt = nulll; ccatcch (Exccepttionn e) ppubllic voiid ddelSStuddentt(Sttrinng ssNo) thhrowws EExceeptiion Connnecctioon cconnn = nulll; PreeparredSStattemeent psttmt =

52、nnulll; tryy connn = CoonneectiionMManaagerr.geetCoonneectiion(); psttmt = cconnn.prrepaareSStattemeent(StuudenntDAAOSqql.DDEL_STUUDENNT); psttmt.settStrringg(1, sNNo); psttmt.exeecutteUppdatte(); ccatcch (Exccepttionn e) thrrow neww Exxcepptioon(dellStuudennt: + e.ggetMMesssagee(), e); ffinaallyy t

53、ryy if (psstmtt != nuull) psstmtt.cllosee(); psstmtt = nulll; ccatcch (Exccepttionn e) 2.6.11 StuudenntDAAOSqql类packkagee skky.oorg.daoo.immpl;publlic claass StuudenntDAAOSqql publlic finnal staaticc Sttrinng AADD_STUUDENNT = iinseert intto tt_sttudeent(snoo, ssnamme, sagge, gennderr,sbirrth)vallues

54、s(?,?,?,?,?);2.6.12 ClaassRRoommDAOOSqll类packkagee skky.oorg.daoo.immpl;publlic claass ClaassRRoommDAOOSqll ppubllic staaticc Sttrinng AADD_STUUDENNT_CCLASSSROOOM = inssertt inntot_sttudeent_claassrroomm(rooom_id,snoo)vaaluees(?,?);2.6.13 ClaassRRoomm类packkagee skky.oorg.beaan;impoort javva.iio.*;pu

55、bllic claass ClaassRRoomm immpleemennts Serriallizaablee pprivvatee Sttrinng rroommId = ; pprivvatee Sttrinng rroommNamme = ; ppubllic Strringg geetRooomIId() retturnn rooomIId; ppubllic voiid ssetRRoommId(Strringg rooomIId) thiis.rroommId = rroommId; ppubllic Strringg geetRooomNNamee() retturnn roo

56、omNNamee; ppubllic voiid ssetRRoommNamme(SStriing rooomNaame) thiis.rroommNamme = rooomNNamee; 2.6.14 Stuudennt类packkagee skky.oorg.beaan;impoort javva.iio.*;publlic claass Stuudennt iimpllemeentss Seeriaalizzablle ppubllic Strringg geetsNNo() retturnn sNNo; ppubllic voiid ssetssNo(Strringg sNNo) th

57、iis.ssNo = ssNo; ppubllic Strringg geetsNNamee() retturnn sNNamee; ppubllic voiid ssetssNamme(SStriing sNaame) thiis.ssNamme = sNNamee; ppubllic Strringg geetsAAge() retturnn sAAge; ppubllic voiid ssetssAgee(Sttrinng ssAgee) thiis.ssAgee = sAgge; ppubllic Strringg geetGeendeer() retturnn geendeer; p

58、publlic voiid ssetGGendder(Strringg geendeer) thiis.ggendder = ggendder; pprivvatee Sttrinng ssNo = ; pprivvatee Sttrinng ssNamme = ; pprivvatee Sttrinng ssAgee = ; pprivvatee Sttrinng ggendder = ; pprivvatee Sttrinng ssbirrth = ; pprivvatee Sttrinng cclasssRooomIId = ; pprivvatee Sttrinng cclasssRo

59、oomNNamee = ; ppubllic Strringg geetCllasssRooomIdd() retturnn cllasssRooomIdd; ppubllic voiid ssetCClasssRooomIId(SStriing claassRRoommId) thiis.cclasssRooomIId = cllasssRooomIdd; ppubllic Strringg geetCllasssRooomNaame() retturnn cllasssRooomNaame; ppubllic voiid ssetCClasssRooomNNamee(Sttrinng cc

60、lasssRooomNNamee) thiis.cclasssRooomNNamee = claassRRoommNamme; ppubllic Strringg geetSbbirtth() retturnn sbbirtth; ppubllic voiid ssetSSbirrth(Strringg sbbirtth) thiis.ssbirrth = ssbirrth; 2.6.15 StuudenntCRRUD类类(运行行主类)packkagee skky.oorg.tesst;impoort skyy.orrg.bbeann.Sttudeent;impoort skyy.orrg.s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论