之漫談使用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表,這就是一個事務,這兩步中有任何一步出錯,事務必須回滾??磥砉こ坛痰慕Y構構吧:下面開始始放出所所有源代代碼: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

提交評論