企业管理JDBC讲课流程_第1页
企业管理JDBC讲课流程_第2页
企业管理JDBC讲课流程_第3页
企业管理JDBC讲课流程_第4页
企业管理JDBC讲课流程_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、JDBC讲课流程JDBC概述和基本数据库操作JDBC(java database connectivity)用于在java程序中实现数据库操作的数据库编程接口,支持基本的SQL语句,为应用程序和数据库之间提供了桥梁javaa程序和和数据库库之间的的关系如如下图:JAVA应用程序JDBC APIJDBC驱动程序管理器JDBC FOR ORACLEJDBC FOR SQL SERVERJDBC FOR OTHER DBORACLESQL SERVEROTHERS DBJDBCC的版本本:JDK11.4,1.55对应JJDBCC3.00JDK11.6对对应JDDBC44.0介绍jaava中中和操作作

2、数据库库相关的的APII,解释释这些AAPI都都是未实实现的,真正实实现操作作的是数数据库厂厂家提供供的类库库,例如如oraaclee提供的的claassees122.jaar,ssql serrverr提供的的msssqlsservver.jarr等。将oraaclee安装文文件下的的claassees122.jaar文件件构建到到myeecliipsee开发工工具下。开始数据据库编程程:(别别忘先导导入包)第一步 加载数数据库驱驱动程序序Classs.fforNNamee(ooraccle.jdbbc.ddrivver.OraacleeDriiverr);这是利利用反射射注册一一个数据据库

3、驱动动或者用驱驱动管理理器也可可以注册册数据库库驱动DrivverMManaagerr.reegissterrDriiverr(neew ooraccle.jdbbc.ddrivver.OraacleeDriiverr();第二步 创建数数据库连连接对象象Striing urll=jjdbcc:orraclle:tthinn:1127.0.00.1:15221:ddhc;Striing useer = sscottt;Striing pwdd = tiigerr;Connnecttionn coonn = DDrivverMManaagerr.geetCoonneectiion(urll,us

4、ser,pwdd);其中dhhc表示示的是数数据库名名或域名名而并非非是服务务名DrivverMManaagerr 类存存有已注注册的DDrivver 类的清清单。当当调用方方法geetCoonneectiion 时,它它将检查查清单中中的每个个驱动程程序,直直到找到到可与UURL 中指定定的数据据库进行行连接的的驱动程程序为止止。如果改成成用OCCI形式式连接,urll字符串串改为类类似以下下语句:Striing urll = jddbc:oraaclee:occi8:scoott/tiggerdhcc;或者Striing urll = jddbc:oraaclee:occi:sscottt

5、/ttigeerddhc;第三步 创建SSQL语语句载体体对象Stattemeent stmmt = coonn.creeateeStaatemmentt();第四步 执行SSQL语语句返回回结果集集对象ResuultSSet rs = sstmtt.exxecuuteQQuerry(sellectt * froom eemplloyeees);第五步遍遍历结果果集返回回数据whille (rs.nexxt()Systtem.outt.prrinttln(编号号: + rrs.ggetIInt(1) + t姓姓名: + rs.gettStrringg(3);在这一步步讲解结结果集指指针的概概念

6、,默默认状态态下游标标只能向向下移动动需要注意意gettXXXX方法的的数据类类型要和和表中字字段的数数据类型型兼容。讲解geetXXXX()括号中中的参数数既可以以是列索索引,也也可以是是列名,如果使使用列名名并且结结果集中中有多个个列的名名字是相相同的,那么返返回第一一列的的的列值,一般用用列索引引效率会会高一些些介绍rss.wassNulll方法法,当前前最后一一次geetXXXX()返回的的列值是是否为nnulll,需要要注意的的是如果果gett方法以以数字的的形式获获取列值值且返回回的列值值为nuull,得到的的结果会会自动的的转换为为0或0.00别忘记在在下面介介绍jaava的的数

7、据类类型和SSQL的的数据类类型之间间的映射射关系第六步 关闭对对象释放放资源采取逆向向关闭对对象的顺顺序rs.cclosse();stmtt.cllosee();connn.cllosee();在关闭sstmtt对象或或利用sstmtt对象重重新执行行其他SSQL语语句时时时会自动动关闭rrs对象象。解讲数据据类型之之间的映映射关系系SQL类类型JAVAA类型CHARRStriingREALLFloaatDATAALINNKjavaa.neet.UURLREFRefSTRUUCTStruuctDISTTINCCTMapppinggofuundeerlyyinggtyppeARRAAYArra

8、ayBLOBBBlobbCLOBBClobbTIMEESTAAMPjavaa.sqql.TTimeestaampTIMEEjavaa.sqql.TTimeeDATEEjavaa.sqql.DDateeLONGGVARRBINNARYYbyteeVARBBINAARYbyteeBINAARYbyteeDOUBBLEdoubbleFLOAATdoubbleVARCCHARRStriingLONGGVARRCHAARStriing以上操作作的完整整代码:impoort javva.ssql.*;publlic claass JDBBC1 pubblicc sttatiic vvoidd maain(

9、Strringg arggs) thrrowss SQQLExxcepptioon /注册数数据库驱驱动程序序DrriveerMaanagger.reggistterDDrivver(neww orraclle.jjdbcc.drriveer.OOraccleDDrivver();/创建数数据库连连接对象象Sttrinng uurl = jdbbc:ooraccle:thiin:1277.0.0.11:15521:dhcc;Sttrinng uuserr = sccottt;Sttrinng ppwd = tigger;Coonneectiion connn = DrriveerMaanagg

10、er.gettConnnecctioon(uurl, usser, pwwd);/创建SSQL语语句载体体对象Sttateemennt sstmtt = connn.ccreaateSStattemeent();/返回结结果集对对象ReesulltSeet rrs = sttmt.exeecutteQuueryy(sseleect * ffromm emmplooyeees);/遍历结结果集返返回数据据whhilee (rrs.nnextt()SSysttem.outt.prrinttln(编号号: + rrs.ggetIInt(1) + t姓姓名: + rs.gettStrringg(3);

11、/关闭对对象rss.cllosee();sttmt.cloose();coonn.cloose();经过优化化的代码码:impoort javva.ssql.*;publlic claass JDBBC1 pubblicc sttatiic vvoidd maain(Strringg arggs) Coonneectiion connn = nuull;Sttateemennt sstmtt = nulll;ReesulltSeet rrs = nuull;trry / 注注册数据据库驱动动程序DDrivverMManaagerr.reegissterrDriiverr(neew ooracc

12、le.jdbbc.ddrivver.OraacleeDriiverr();/ 创创建数据据库连接接对象SStriing urll = jddbc:oraaclee:thhin:1227.00.0.1:115211:dhhc;SStriing useer = sscottt;SStriing pwdd = tiigerr;cconnn = DriiverrMannageer.ggetCConnnecttionn(urrl, useer, pwdd);/ 创创建SQQL语句句载体对对象sstmtt = connn.ccreaateSStattemeent();/ 返返回结果果集对象象rrs = s

13、ttmt.exeecutteQuueryy(sseleect * ffromm emmplooyeees);/ 遍遍历结果果集返回回数据wwhille (rs.nexxt() Sysstemm.ouut.pprinntlnn(编编号: + rs.gettIntt(1) + tt姓名:+ rrs.ggetSStriing(3); cattch (SQQLExxcepptioon ee) ee.prrinttStaackTTracce(); finnallly ttry / 关闭对对象if (rss != nuull)rs.cloose();if (sttmt != nulll)stmmt.ccl

14、osse();if (coonn != nulll)connn.cclosse(); caatchh (SSQLEExceeptiion e) e.pprinntSttackkTraace();练习:查查询deeparrtmeentss表中的的50190号部部门信息息(部门门编号,部门名名称,部部门管理理者姓名名,部门门所在城城市)impoort javva.ssql.*;publliccclasss TTestt6 publlicsstatticvvoidd maain(Strringg arggs) Coonneectiion connn = nuull;Sttateemennt sstm

15、tt = nulll;ReesulltSeet rrs = nuull;try DDrivverMManaagerr.reegissterrDriiverr(neww orraclle.jjdbcc.drriveer.OOraccleDDrivver();SStriing urll = jddbc:oraaclee:thhin:loocallhosst:115211:dhhc;SStriing useer = sscottt;SStriing pwdd = tiigerr;cconnn = DriiverrMannageer.ggetCConnnecttionn(urrl, useer, pw

16、dd);sstmtt = connn.ccreaateSStattemeent();rrs = sttmt.exxecuuteQQuerry(sellectt d.depparttmennt_iid,ddepaartmmentt_naame,lasst_nnamee,ciity froom ddepaartmmentts dd,emmplooyeees ee,loocattionns ll whheree d.mannageer_iid=ee.emmplooyeee_idd(+) annd dd.loocattionn_idd=l.loccatiion_id andd d.depparttme

17、nnt_iid bbetwweenn 500 annd 1190 oordeer bby dd.deeparrtmeent_id);whille (rs.nexxt() Sysstemm.ouut.pprinntlnn(rss.geetInnt(11) + + rs.gettStrringg(2) + + rrs.ggetSStriing(3) + + rs.gettStrringg(4); cattch (SQQLExxcepptioon ee) ee.prrinttStaackTTracce(); finnallly try if (rs != nulll)rs.cloose();if (

18、stmmt != nnulll)stmmt.cclosse();if (connn != nnulll)connn.cclosse(); caatchh (EExceeptiion e) e.pprinntSttackkTraace();综合练习习:查询jjob_hisstorry表中中所有数数据,将将数据写写入到文文本文件件中,一一条记录录一行,列值之之间用|隔开impoort javva.ssql.*;impoort javva.iio.*;publliccclasss TTestt7 publlicsstatticvvoidd maain(Strringg arggs) Coonneec

19、tiion connn = nuull;Sttateemennt sstmtt = nulll;ReesulltSeet rrs = nuull;FiileWWritter fw = nnulll;BuuffeereddWriiterr bww = nulll;try DDrivverMManaagerr.reegissterrDriiverr(neww orraclle.jjdbcc.drriveer.OOraccleDDrivver();SStriing urll = jddbc:oraaclee:thhin:loocallhosst:115211:dhhc;SStriing useer

20、= sscottt;SStriing pwdd = tiigerr;cconnn = DriiverrMannageer.ggetCConnnecttionn(urrl, useer, pwdd);sstmtt = connn.ccreaateSStattemeent();rrs = sttmt.exeecutteQuueryy(sseleect * ffromm joob_hhisttoryy);ffw = neew FFileeWriiterr(ee:jobb_hiistoory.txtt);bbw = neew BBufffereedWrriteer(ffw);whille (rs.ne

21、xxt() bw.wriite(rs.gettIntt(1) + | + rs.gettStrringg(2) + |+ rrs.ggetSStriing(3) + | + rrs.ggetSStriing(4) + |+ rrs.ggetIInt(5);bw.newwLinne(); cattch (SQQLExxcepptioon ee) ee.prrinttStaackTTracce(); cattch (IOOExccepttionn e) ee.prrinttStaackTTracce(); finnallly tryif (bw != nulll)bw.cloose();if (r

22、s != nulll)rs.cloose();if (stmmt != nnulll)stmmt.cclosse();if (connn != nnulll)connn.cclosse();cattch (Exxcepptioon ee)e.pprinntSttackkTraace();数据增删删改和可可滚动结结果集讲述Sttateemennt对象象执行SSQL语语句的三三种方法法:execcuteeQueery() 执执行查询询单个结结果集的的语句,该语句句返回单单个 RResuultSSet 对象execcuteeUpddatee()执执行给定定 SQQL 语语句,该该语句可可能为 INS

23、SERTT、UPPDATTE 或或 DEELETTE 语语句,或或者不返返回任何何内容的的 SQQL 语语句(如如 SQQL DDDL 语句),该语语句返回回影响的的行数,如果是是DDLL语句则则返回00execcutee()执执行给定定的 SSQL 语句,这个SSQL语语句可能能实现并并不知道道是查询询还是增增删改,返回值值是布尔尔值,如如果是查查询语句句返回结结果则为为truue,可可以用ggetRResuultSSet得得到ReesulltSeet结果果创建一个个学生表表做数据据增删改改试验:creaatettablle SStuddentt(sidd nuumbeer,snaame v

24、arrchaar2(50),adddDaate datte);演示增加加学生数数据impoort javva.ssql.*;publlic claass Tesst8 pubblicc sttatiic vvoidd maain(Strringg arggs) Coonneectiion connn = nuull;Sttateemennt sstmtt = nulll;trry DDrivverMManaagerr.reegissterrDriiverr(neew ooraccle.jdbbc.ddrivver.OraacleeDriiverr();SStriing urll = jddbc

25、:oraaclee:thhin:loocallhosst:115211:dhhc;SStriing useer = sscottt;SStriing pwdd = tiigerr;cconnn = DriiverrMannageer.ggetCConnnecttionn(urrl, useer, pwdd);sstmtt = connn.ccreaateSStattemeent();int i = sttmt.exxecuuteUUpdaate(innserrtinnto Stuudennt vvaluues (1001,tomm,tto_ddatee(220088-3-1,yyyyy-mm-

26、dd);SSysttem.outt.prrinttln(操作作了 + ii + 行); cattch (SQQLExxcepptioon ee) ee.prrinttStaackTTracce(); finnallly ttry if (sttmt != nulll)stmmt.cclosse();if (coonn != nulll)connn.cclosse(); caatchh (EExceeptiion e) e.pprinntSttackkTraace();演示修改改学生数数据:int i = sttmt.exxecuuteUUpdaate(uppdatte SStuddentt s

27、eet ssnamme=jacck,adddDatte=tto_ddatee(220077-3-1,yyyyy-mm-dd) wwherre ssid=1011);Systtem.outt.prrinttln(操作作了 + ii + 行);学生自己己动手改改成删除除1011学生数数据:int i = sttmt.exxecuuteUUpdaate(deelette ffromm Sttudeent wheere sidd=1001);Systtem.outt.prrinttln(操作作了 + ii + 行);学生试验验执行DDDL语语句删除除表:int i = sttmt.eexeccutee

28、Upddatee(ddropp taablee Sttudeent);Systtem.outt.prrinttln(操作作了 + ii + 行);学生练习习:提供供一个原原始文本本文件SStuddentt.txxt,将将文本文文件中的的数据导导入到数数据库中中的表中中Studdentt.txxt文件件内容101,tomm,20008-3-11102,jacck,220088-3-2103,rosse,220088-3-3104,smiith,20008-33-4105,johhn,220088-3-5106,zhaang,20008-33-6107,li,20008-33-7impoort j

29、avva.ssql.*;impoort javva.iio.*;publliccclasss TTestt10 publlicsstatticvvoidd maain(Strringg arggs) thrrowss Exxcepptioon Coonneectiion connn = nuull;Sttateemennt sstmtt = nulll;ReesulltSeet rrs = nuull;DrriveerMaanagger.reggistterDDrivver(neww orraclle.jjdbcc.drriveer.OOraccleDDrivver();Sttrinng uu

30、rl = jdbbc:ooraccle:thiin:loccalhhostt:15521:dhcc;Sttrinng uuserr = sccottt;Sttrinng ppwd = tigger;coonn = DDrivverMManaagerr.geetCoonneectiion(urll, uuserr, ppwd);sttmt = cconnn.crreatteSttateemennt(RResuultSSet.TYPPE_SSCROOLL_INSSENSSITIIVE,RessulttSett.COONCUUR_UUPDAATABBLE);FiileRReadder fr = nn

31、ew FilleReeadeer(e:Sttudeent.txtt);BuuffeereddReaaderr brr = neww BuuffeereddReaaderr(frr);Sttrinng ss = br.reaadLiine();whille (s != nnulll) SStriing rrowss = s.sspliit(,);sstmtt.exxecuuteUUpdaate(innserrt iintoo Sttudeent valluess ( + rowws00 + ,+ rrowss1 + ,to_datte( + roows2 + ,yyyyy-mmm-ddd);ss

32、 = br.reaadLiine();brr.cllosee();sttmt.cloose();coonn.cloose();讲解可滚滚动的结结果集游游标指针针Connnecttionn对象创创建Sttateemennt对象象有两种种形式:一种是用用creeateeStaatemmentt()无无参方法法,这种种方法创创建的SStattemeent对对象执行行的查询询的结果果集指针针只能向向下移动动另一种方方法是用用creeateeStaatemmentt(innt rresuultSSetTTypee, iint ressulttSettConncurrrenncy)有参方方法,这这种方法法

33、创建的的Staatemmentt对象执执行的查查询结果果集的指指针是可可以任意意移动的的后一种方方法有两两个参数数:分别别是结果果集游标标类型和和结果集集是否可可更新结果集游游标类型型有三个个设置值值:ResuultSSet.TYPPE_FFORWWARDD_ONNLY 指针只只能向下下移动(默认)ResuultSSet.TYPPE_SSCROOLL_INSSENSSITIIVE 指针可可任意滚滚动,但但结果集集中被更更新的行行不可视视ResuultSSet.TYPPE_SSCROOLL_SENNSITTIVEE 指针针可任意意滚动,结果集集中被更更新的行行可视结果集是是否可更更新有两两个设置

34、置值:ResuultSSet.CONNCURR_REEAD_ONLLY 只只读(默默认)ResuultSSet.CONNCURR_UPPDATTABLLE可更更新记录录关于指针针移动的的方法:默认打开开结果集集的时候候指针位位于第一一行记录录的上面面nextt() 下一行行prevviouus() 上一一行firsst() 第一一行lastt() 最后一一行absoolutte(nn) 定定位到第第n条relaativve(nn) 相相对于当当前指针针位置定定位到第第n条,n为正正数下移移,n为为负数上上移befooreFFirsst() 第一一条的前前面afteerLaast() 最最后一条

35、条的后面面getRRow() 获获得当前前行的行行号学生练习习:查询询出工资资排名在在第6位位到第110位的的员工编编号,姓姓名和工工资stmtt = connn.ccreaateSStattemeent(RessulttSett.TYYPE_SCRROLLL_INNSENNSITTIVEE,ReesulltSeet.CCONCCUR_REAAD_OONLYY);rs = sttmt.exeecutteQuueryy(sseleect * ffromm emmplooyeees oordeer bby ssalaary dessc);if (rs.abssoluute(6) for (innt

36、 ii = 6; i = 110; i+) Syysteem.oout.priintlln(ii + :t + rrs.ggetIInt(1) + /+ rrs.ggetSStriing(3) + / + rrs.ggetDDoubble(8);if (!rss.neext()breaak;学生练习习2(选选做):每次执执行程序序都随机机查询出出1个员工工的编号号和姓名名作为中中奖名单单,以前前已经中中过奖的的员工不不在抽奖奖的范围围内创建一个个临时表表存放中中过奖的的员工编编号creaatettablle aawarrd(eemplloyeee_iid nnumbber);代码片断断stmt

37、t = connn.ccreaateSStattemeent(RessulttSett.TYYPE_SCRROLLL_INNSENNSITTIVEE,ReesulltSeet.CCONCCUR_REAAD_OONLYY);/ 查查询出以以前未抽抽过奖的的所有员员工rs = sttmt.eexeccuteeQueery(seelecct * frrom empployyeess whheree emmplooyeee_idd noot iin (sellectt emmplooyeee_idd frrom awaard);/ 获获得员工工总数int emppcouunt = 00;if (rs.

38、lasst()emppcouunt = rrs.ggetRRow();/ 产产生随机机数指针针位置int r = (iint) (emppcouunt - 11 + 1) * MMathh.raandoom() + 1);/ 指指针定位位打印出出员工信信息,并并保存中中奖员工工编号if (rs.abssoluute(r) Sysstemm.ouut.pprinntlnn(中中奖员工工: + rrs.ggetIInt(1) + t + rs.gettStrringg(3);stmmt.eexeccuteeUpddatee(iinseert intto aawarrd vvaluues ( + r

39、s.gettIntt(1)+ ); ellse Sysstemm.ouut.pprinntlnn(已已经没有有未中过过奖的员员工了);将上例修修改为每每次执行行程序抽抽出3个个中奖员员工,并并且不能能和已经经抽出过过的员工工重复。for (int ii = 1;ii = 3;i +)/ 查查询出以以前未抽抽过奖的的所有员员工rs = sstmtt.exeecutteQuueryy(sseleect * ffromm emmplooyeees wwherre eemplloyeee_iid nnot in (seelecct eemplloyeee_iid ffromm awwardd);/ 获

40、获得员工工总数int emppcouunt = 00;if (rs.lasst()emmpcoountt = rs.gettRoww();elseebreaak;/ 产产生随机机数指针针位置int r = (iint) (emppcouunt - 11 + 1) * MMathh.raandoom() + 1);/ 指指针定位位打印出出员工信信息,并并保存中中奖员工工编号if (rs.abssoluute(r) Syysteem.oout.priintlln(中奖员员工: + rs.gettIntt(1) + tt + rss.geetSttrinng(33);sttmt.exeecutteU

41、ppdatte(inssertt innto awaard valluess ( + rss.geetInnt(11)+ );元数据(Metta-DDataa)Connnecttionn对象的的gettMettaDaata()方法法返回DattabaaseMMetaaDatta对象象中包含含了数据据库信息息ResuultSSet对对象的ggetMMetaaDatta()方法返返RessulttSettMettaDaata对对象包含含了结果果集信息息演示获取取数据库库信息/获得得数据库库元数据据DataabasseMeetaDDataa dmmd = coonn.gettMettaDaata()

42、;/打印印URLLSysttem.outt.prrinttln(dmdd.geetURRL();/打印印用户名名Systtem.outt.prrinttln(dmdd.geetUsserNNamee();/打印印JDBBC驱动动版本号号Systtem.outt.prrinttln(dmdd.geetDrriveerNaame();/打印印数据库库名称Systtem.outt.prrinttln(dmdd.geetDaatabbaseeProoducctNaame();/打印印数据库库版本号号Systtem.outt.prrinttln(dmdd.geetDaatabbaseeMajjorVVe

43、rssionn();演示获取取结果集集信息stmtt = connn.ccreaateSStattemeent();rs = sttmt.exeecutteQuueryy(sseleect * ffromm emmplooyeees);/获取取元数据据ResuultSSetMMetaaDatta rrsMeeta = rrs.ggetMMetaaDatta();/打印印列的个个数Systtem.outt.prrinttln(列数数: + rrsMeeta.gettCollumnnCouunt();/第11列列名名Systtem.outt.prrinttln(rsMMetaa.geetCoolu

44、mmnNaame(1);/第11列数据据类型Systtem.outt.prrinttln(rsMMetaa.geetCoolummnTyypeNNamee(1);/第11列数据据允许宽宽度Systtem.outt.prrinttln(rsMMetaa.geetPrreciisioon(11);/第一一列数据据小数位位数Systtem.outt.prrinttln(rsMMetaa.geetSccalee(1);学生练习习:打印印出查询询员工表表结果集集的数据据结构,如下图图1EMMPLOOYEEE_IDD/NUUMBEER(66,0)2FIIRSTT_NAAME/VARRCHAAR2(20,0

45、)3LAAST_NAMME/VVARCCHARR2(225,00)4EMMAILL/VAARCHHAR22(255,0)5PHHONEE_NUUMBEER/VVARCCHARR2(220,00)6HIIRE_DATTE/DDATEE(0,0)7JOOB_IID/VVARCCHARR2(110,00)8SAALARRY/NNUMBBER(8,22)9COOMMIISSIION_PCTT/NUUMBEER(22,2)10MMANAAGERR_IDD/NUUMBEER(66,0)11DDEPAARTMMENTT_IDD/NUUMBEER(44,0)rs = sttmt.exeecutteQuuery

46、y(sseleect * ffromm emmplooyeees);/获取取元数据据ResuultSSetMMetaaDatta rrsMeeta = rrs.ggetMMetaaDatta();/循环环输出列列结构for (innt ii =11;i = rsMMetaa.geetCoolummnCoountt();i +)Sysstemm.ouut.pprinnt(ii + tt);Sysstemm.ouut.pprinnt(rrsMeeta.gettCollumnnNamme(ii) + /);Sysstemm.ouut.pprinnt(rrsMeeta.gettCollumnnTypp

47、eNaame(i) + ();Sysstemm.ouut.pprinnt(rrsMeeta.gettPreecissionn(i) + , + rsMMetaa.geetSccalee(i) + );Sysstemm.ouut.pprinntlnn();学生练习习(选做做):输输出sccottt用户下下的所有有的表结结构,如如下表名:AAWARRD1EMMPLOOYEEE_IDD/NUUMBEER(00,-1127)表名:CCOUNNTRIIES1COOUNTTRY_ID/CHAAR(22,0)2COOUNTTRY_NAMME/VVARCCHARR2(440,00)3REEGIOON_IID/

48、NNUMBBER(0,-1277)表名:SSTUDDENTT1SIID/NNUMBBER(0,-1277)2SNNAMEE/VAARCHHAR22(500,0)3ADDDDAATE/DATTE(00,0)Stattemeent stmmt = nuull;ResuultSSet rs = nnulll;Stattemeent stmmt2 = nnulll;ResuultSSet rs22 = nulll;/创建建SQLL语句载载体stmtt = connn.ccreaateSStattemeent();stmtt2 = coonn.creeateeStaatemmentt();/查询询数据字

49、字典获得得表名rs = sttmt.exeecutteQuueryy(sseleect tabble_namme ffromm taabs);/遍历历表whille (rs.nexxt()/打印印表名Sysstemm.ouut.pprinntlnn(表表名: + rs.gettStrringg(1);/查询询表的所所有列rs22 = stmmt2.exeecutteQuueryy(sseleect * ffromm + rrs.ggetSStriing(1);/获取取元数据据RessulttSettMettaDaata rsMMetaa = rs22.geetMeetaDDataa();/循环

50、环输出列列结构for (innt ii =11;i = rsMMetaa.geetCoolummnCoountt();i +)Syysteem.oout.priint(i + t);Syysteem.oout.priint(rsMMetaa.geetCoolummnNaame(i) + /);Syysteem.oout.priint(rsMMetaa.geetCoolummnTyypeNNamee(i) + ();Syysteem.oout.priint(rsMMetaa.geetPrreciisioon(ii) + , + rssMetta.ggetSScalle(ii) + );Syyst

51、eem.oout.priintlln();Sysstemm.ouut.pprinntlnn();stmtt2.cclosse();stmtt.cllosee();connn.cllosee();预制SQQL语句句和已存存储过程程PreppareedSttateemennt(预预制SQQL语句句)继承承了Sttateemennt,特特点是预预编译好好SQLL语句并并存放在在PreeparredSStattemeent对对象中,适合在在SQLL语句中中具有一一个或多多个输入入参数,用?做做占位符符,例如如员工的的编号,更新后后的新工工资,在在语句执执行之前前用seetXXXX方法法给参数数赋值,如

52、果是是多条语语句结构构相同但但是参数数不同,用PrrepaareddStaatemmentt速度会会比Sttateemennt快。还有一一个好处处是用占占位符参参数的形形式不用用考虑用用户在设设置参数数的实参参的时候候无意中中输入的的SQLL关键字字,如单单引号。演示用预预编译语语句增加加学生信息息:impoort javva.ssql.*;impoort javva.uutill.*;publlic claass Tesst166 puubliic sstattic voiid mmainn(Sttrinng arrgs) Coonneectiion connn = nuull;Prrepa

53、areddStaatemmentt psstmtt = nulll;trry CClasss.fforNNamee(ooraccle.jdbbc.ddrivver.OraacleeDriiverr);SStriing urll = jddbc:oraaclee:thhin:loocallhosst:115211:dhhc;SStriing useer = sscottt;SStriing pwdd = tiigerr;cconnn = DriiverrMannageer.ggetCConnnecttionn(urrl,uuserr,pwwd);pstmmt = coonn.preeparreS

54、ttateemennt(inssertt innto stuudennt vvaluues (?,?,?);ppstmmt.ssetIInt(1, 1011);ppstmmt.ssetSStriing(2, toom);/创建建GreegorriannCallenddar对对象保存存制定时时间,月月份是从从0111!GGreggoriianCCaleendaar ggc = neew GGreggoriianCCaleendaar(220077,4,1);/实实际是55月ppstmmt.ssetTTimeestaamp(3, neww jaava.sqll.Tiimesstammp(ggc.g

55、getTTimeeInMMilllis();ppstmmt.eexeccuteeUpddatee(); cattch (CllasssNottFouundEExceeptiion e) ee.prrinttStaackTTracce(); cattch (SQQLExxcepptioon ee) ee.prrinttStaackTTracce();ffinaallyyttryif (psstmtt != nuull)psttmt.cloose();if (coonn != nulll)connn.cclosse();cattch (Exxcepptioon ee)e.pprinntSttack

56、kTraace();关于JDDBC日日期时间间的补充充:sql.Datte 类类sqql包中中的日期期类Daate是是utiil包中中Datte类的的子类,实际上上也是uutill.Daate类类的子集集。它只只处理年年月日,而忽略略小时和和分秒,用以代代表SQQL的DDATEE信息。 sql.Timme 类类该类是uutill.Daate类类的子类类,也是是它的一一个子集集。在TTimee类里,只处理理小时和和分秒,代表SSQL的的TIMME类型型。它与与sqll.Daate合合起来才才表示完完整的uutill.Daate类类信息。sql.Timmesttampp 类这个个类也是是utiil

57、.DDatee类的子子类,其其中除了了包含年年月日、小时和和分秒和和信息之之外,还还加入了了纳秒信信息(nnanooseccondd),11纳秒即即1毫微微秒。TTimeestaamp类类用来代代表SQQL时间间戳(TTimeestaamp)类型信信息。演示更新新学生信信息:pstmmt = coonn.preeparreSttateemennt(upddatee sttudeent sett snnamee=?,addddatte=? whheree siid=?);pstmmt.ssetIInt(3, 1011);pstmmt.ssetSStriing(1, jaack);/创建建Gree

58、gorriannCallenddar对对象保存存制定时时间,月月份是从从0111!GreggoriianCCaleendaar ggc = neew GGreggoriianCCaleendaar(220077,4,10);/是5月月10日日pstmmt.ssetTTimeestaamp(2, neww jaava.sqll.Tiimesstammp(ggc.ggetTTimeeInMMilllis();pstmmt.eexeccuteeUpddatee();演示删除除学生信信息:pstmmt = coonn.preeparreSttateemennt(delletee frrom stuud

59、ennt wwherre ssid=?);pstmmt.ssetIInt(1, 1011);pstmmt.eexeccuteeUpddatee();演示查询询员工信息息部门编编号从550990的员员工编号号,姓名名,工资资,入职日日期和部部门:编号:1100姓名:KKingg工资:2240000.00入职日期期:19987-6-117部门编号号:900编号:1101姓名:KKochhharr工资:1170000.00入职日期期:19989-9-221部门编号号:900略pstmmt = coonn.ppreppareeStaatemmentt(sseleect empployyee_id,la

60、sst_nnamee,saalarry,hhiree_daate,depparttmennt_iid ffromm emmplooyeees wwherre ddepaartmmentt_idd beetweeen ? aand ?);pstmmt.ssetIInt(1, 50);pstmmt.ssetIInt(2, 90);rs = psstmtt.exxecuuteQQuerry();whille (rs.nexxt() Sysstemm.ouut.pprinntlnn(编编号: + rs.gettIntt(1);Sysstemm.ouut.pprinntlnn(姓姓名: + rs.get

温馨提示

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

评论

0/150

提交评论