第9章数据库程序设计

上传人:壹****1 文档编号:567643304 上传时间:2024-07-21 格式:PPT 页数:22 大小:340KB
返回 下载 相关 举报
第9章数据库程序设计_第1页
第1页 / 共22页
第9章数据库程序设计_第2页
第2页 / 共22页
第9章数据库程序设计_第3页
第3页 / 共22页
第9章数据库程序设计_第4页
第4页 / 共22页
第9章数据库程序设计_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《第9章数据库程序设计》由会员分享,可在线阅读,更多相关《第9章数据库程序设计(22页珍藏版)》请在金锄头文库上搜索。

1、耍狡郊司祸霖迎圣绘坏宜贬撂丹澡管颧淑猖郊马滋撩歪祷迫凛捕总烛盾坑第9章数据库程序设计第9章数据库程序设计第9章数据库程序设计遂猪明谆例桅略恭退攒讽伏叭闻碧淀浪陷丽复还兹印问馏碘丸襟驱笑顿胡第9章数据库程序设计第9章数据库程序设计v教学目标:v通过本章的学习,理解JDBC的功能及体系结构,掌握利用JDBC实现数据库的查询更新等操作的方法,能够实现基本的Java数据库程序设计。漾散呜暑衡靳戌楚士织绞侈戴比串册抓萨剧孙附粒狼拆禹匡瑟绕引灶欧酞第9章数据库程序设计第9章数据库程序设计v案例成绩查询系统分析v程序可以实现各种单科考试、竞赛等成绩的各种查询。程序主界面如图9.2所示。当输入考号后单击“按考

2、生查询”按钮,则显示该生成绩,如图9.3所示。v单击“成绩名次”按钮可以查看考试排名,如图9.4所示。单击“未通过名单”按钮可以查看学生不及格的情况,如图9.5所示。添苔捆茨旭哨党着补回卯吹疟禾物嚣躇浮硫职萝脏踞饮钟逃淫甲滔欧线三第9章数据库程序设计第9章数据库程序设计v案例框架利用JDBC连接数据库并进行了访问。下面将详细介绍相关知识。册谋坐执滑打股茵技亩倒朝熔机藉眷镑柔垛贮菩瑰刑交舌招镀译锹泼刷艺第9章数据库程序设计第9章数据库程序设计9.1JDBC驱动程序v为了与某个数据库连接,必须要有适合该数据库的驱动程序。JDBC驱动程序主要有以下4种。v(1)JDBC-ODBC桥加ODBC驱动程序

3、。v这种驱动程序经由ODBC驱动程序供JDBC访问数据库,即在JDBC的帮助下以JDBC-ODBC桥的形式使用ODBC。v(2)本地API和部分Java编写的驱动程序。v这种驱动程序把客户机API上的JDBC调用转换为对数据库的调用,也就是说这种类型的驱动程序是通过调用本地API来实现与数据库的通信。蛇臻蛋肾森栅唉光页偶偷滨链才羊稽橇跨录体肺感蹲快偷至倘救去靳撤抽第9章数据库程序设计第9章数据库程序设计v(3)JDBC网络纯Java驱动程序。v这种驱动程序将JDBC转换为与DBMS无关的网络协议,然后这种协议又被某个服务器转换为一种DBMS协议。这种网络服务器中间件能够将它的Java客户机连接

4、到多种不同的数据库上,所用的具体协议取决于提供者。通常这是最为灵活的JDBC驱动程序。v(4)本地协议纯Java驱动程序。v这种驱动程序直接将JDBC调用转换为DBMS所使用的网络协议。这将允许从客户机上直接调用DBMS服务器,它是Intranet访问的一个很实用的解决方法。邀罗宋怪秒垂坝婉泻哨御函做等骤声郎蚀垫垂啄吟吉括嘉殿翘阴思虽届孺第9章数据库程序设计第9章数据库程序设计9.2ODBC数据源的设置vODBC数据源设置步骤如下:v选择“开始”“控制面板”“管理工具”“数据源”命令,打开ODBC数据源管理器,如图9.7所示,窗口中列出了目前已有的数据源。可以选择已有的数据源后,单击“配置”按

5、钮,对已有的数据源进行修改。单击“添加”按钮创建一个新的数据源,进入创建新数据源向导,拖动滑动条,选择数据源的驱动程序为SQLServer,单击“完成”按钮,进入创建SQLServer新数据源向导,输入数据源名称为:Student,服务器名为需要连接的服务器的名字,然后单击“下一步”按钮,设置登录SQLServer的验证方式后单击“下一步”按钮,更改默认的数据库为Student。则使用Student数据库中的表时,只需指定表名即可。单击“下一步”按钮,保持默认即可,单击“完成”按钮。侗邑乙艇蹬上沉阳痞赐软靳崎娘财圆汐萎鬼戈围舜涯辛岭痘爽戳婿豹棒扮第9章数据库程序设计第9章数据库程序设计9.3J

6、DBCAPI的使用vJDBC可做3件事:建立与数据库的连接;向数据库发送SQL语句;处理数据库的返回结果。vJDBC常用的的几个核心类如下。v(1)java.sql.DriverManager装载JDBC驱动程序,还负责返回适当驱动程序的连接。当getConnection()方法被调用时,DriverManager会试图从已经注册的驱动程序中为URL寻找一个合适的驱动程序。v(2)java.sql.Connection提供JDBCAPI和URL指定的数据库管理系统之间的连接。Connection表示与特定数据库的会话。v(3)java.sql.Statement作为在给定的Connection

7、上执行SQL语句的容器。v(4)java.sql.ResultSet控制通过游标移动对变化的结构中给定Statement的结果进行访问,它使用一系列getXXX()方法访问数据。率厅倾涉芽陶诞床职亢管绵灼祭汐悟缠推曙捂渡撩勒羔叙雕逆娘郑装拷真第9章数据库程序设计第9章数据库程序设计v9.3.1JDBC基础v下面通过对Student数据库进行简单的顺序查询来掌握通过JDBC访问数据库的一般步骤。v1.加载JDBC驱动程序v首先需要使用JDBC数据库驱动名字调用Class.forName()方法,把相应的驱动程序类加载到Java虚拟机JVM中。v如果采用JDBC-ODBC桥连接数据库,则执行语句:

8、vClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);v如果直接采用微软提供的SQLServer2000驱动程序连接SQLServer2000,则需要下载驱动程序进行安装,然后执行语句:vClass.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);岂么裤沫垒挫脯荷篙您嘱究丽凛炎抉免姓猖华健硫蠕娠卧昼晓屋冒衔后活第9章数据库程序设计第9章数据库程序设计v2.创建跟数据库的连接v(1)JDBCURL。Java应用程序需要使用一个URL形式的字符串来获取一个数据库连接。这个字符串的形式随数据库的不同而不同

9、,但通常总是以“jdbc:”开始的。例如有以下几种情况。v通过JDBC-ODBC桥连接ODBC数据源JDBCEX_Northwind,则vStringURL=”jdbc:odbc:JdbcOdbcDriver”;v采用微软提供的SQLServer2000驱动程序连接SQLServer2000,则vStringURL=”jdbc:Microsoft:sqlsserver:/localhost:1433;DatabaseName=Northwind”;桓夹笺径救塞孪题毁咏融诚寨馋缝阉哇敲垃摩锋柯快服陋高坐膏额瓢伤闭第9章数据库程序设计第9章数据库程序设计v(2)创建连接。v代码如下。vConnec

10、tioncon=DriverManager.getConnection(jdbc:odbc:JDBCEX_Northwind,);v3.创建SQL语句对象StatementvStatementst=con.createStatement();v4.向数据库执行SQL语句vResultSetrs=st.executeQuery(select*fromemployees);v则返回Northwind数据库employees表中的所有数据并保存在ResultSet中。前桂岳化稠呆稿喘支俩潜络丽纷帕厘田蔚评抄啸票揖了淌纷傍智滔馈点如第9章数据库程序设计第9章数据库程序设计vStatement()执行S

11、QL语句的方法类型方法及功能说明booleanexecute(Stringsql);执行给定的SQL语句,该语句可能返回多个结果booleanexecute(Stringsql,intautoGeneratedKeys);执行给定的SQL语句(该语句可能返回多个结果),并通知驱动程序所有自动生成的键都可用于检索booleanexecute(Stringsql,intcolumnIndexes);执行给定的SQL语句(该语句可能返回多个结果),并通知驱动程序在给定数组中指示的自动生成的键可用于检索booleanexecute(Stringsql,StringcolumnNames);执行给定的S

12、QL语句(该语句可能返回多个结果),并通知驱动程序在给定数组中指示的自动生成的键可用于检索intexecuteBatch();将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组ResultSetexecuteQuery(Stringsql);执行给定的SQL语句,该语句返回单个ResultSet对象intexecuteUpdate(Stringsql);执行给定SQL语句,该语句可能为INSERT、UPDATE或DELETE语句,或者不返回任何内容的SQL语句(如SQLDDL语句)intexecuteUpdate(Stringsql,intautoGeneratedK

13、eys)执行给定的SQL语句,并用给定标志通知驱动程序由此Statement生成的自动生成键是否可用于检索intexecuteUpdate(Stringsql,intcolumnIndexes)执行给定的SQL语句,并通知驱动程序在给定数组中指示的自动生成的键可用于检索intexecuteUpdate(Stringsql,StringcolumnNames)执行给定的SQL语句,并通知驱动程序在给定数组中指示的自动生成的键可用于检索滥放挣栖准辉腔营络耀额涕颐魔渊砖令挝郸捻艺肉扇猩染排严亲是淖啃条第9章数据库程序设计第9章数据库程序设计v5.处理返回的结果集v可以把ResultSet想象为一个二

14、维矩阵,存储数据库表中对应的行和列。v刚创建的ResultSet的游标指向所有记录之前,利用next()方法可以在不同记录间移动。getXXX(StringcolumnName)方法可以依次读取一行中的不同字段。ResultSet的方法如下:返回返回类型类型方法及功能描述方法及功能描述booleanabsolute(introw)方法将指方法将指针移移动到此到此ResultSet对象的象的给定行定行编号号voidafterLast()方法将指方法将指针移移动到此到此ResultSet对象的末尾,正好位于最后一行之后象的末尾,正好位于最后一行之后voidbeforeFirst()方法将指方法将指

15、针移移动到此到此ResultSet对象的开象的开头,正好位于第一行之前,正好位于第一行之前voidcancelRowUpdates()方法取消方法取消对ResultSet对象中的当前行所做的更新象中的当前行所做的更新voidclose()方法立即方法立即释放此放此ResultSet对象的数据象的数据库和和JDBC资源,而不是等待源,而不是等待该对象自象自动关关闭时发生此操作生此操作voiddeleteRow()方法从此方法从此ResultSet对象和底象和底层数据数据库中中删除当前行除当前行booleanfirst()方法将指方法将指针移移动到此到此ResultSet对象的第一行象的第一行XX

16、XgetXXX(StringcolumnName)方法返回当前行列名方法返回当前行列名为ColumnName的字段的字段值XXXgetXXX(intcolumnIndex)方法返回当前行列序号方法返回当前行列序号为columnIndex的字段的字段值汲撮呐制恭关梗邓屁沦刨葫共彦器烂砚渴激缘井甸骸拒沪本鲍句寨凭贫芽第9章数据库程序设计第9章数据库程序设计voidinsertRow()方法将插入行的内容插入到此方法将插入行的内容插入到此ResultSet对象和数据象和数据库中中booleanisAfterLast()方法方法检索指索指针是否位于此是否位于此ResultSet对象的最后一行之后象的最

17、后一行之后booleanisBeforeFirst()方法方法检索指索指针是否位于此是否位于此ResultSet对象的第一行之前象的第一行之前booleanisFirst()方法方法检索指索指针是否位于此是否位于此ResultSet对象的第一行象的第一行booleanisLast()方法方法检索指索指针是否位于此是否位于此ResultSet对象的最后一行象的最后一行booleanlast()方法将指方法将指针移移动到此到此ResultSet对象的最后一行象的最后一行booleannext()方法将指方法将指针从当前位置下移一行从当前位置下移一行booleanprevious()方法将指方法将指

18、针移移动到此到此ResultSet对象的上一行象的上一行voidrefreshRow()方法用数据方法用数据库中的最近中的最近值刷新当前行刷新当前行booleanrelative(introws)方法按相方法按相对行数行数(或正或或正或负)移移动指指针booleanrowDeleted()方法方法检索是否已索是否已删除某行除某行booleanrowInserted()方法方法检索当前行是否已有插入索当前行是否已有插入booleanrowUpdated()方法方法检索是否已更新当前行索是否已更新当前行voidsetFetchDirection(intdirection)方法方法设置此置此Resu

19、ltSet对象中行的象中行的处理方理方向向voidupdateXXX(intcolumnIndex,XXXx)方法用方法用x值更新指定列更新指定列审鸵舍笛陡蛊挛说殉料营煎竭冒觅尸活的侯字孕峨饮禾吕妹下猎啤伏伏痹第9章数据库程序设计第9章数据库程序设计v例:查询Student数据库中成绩表中学号、姓名、成绩字段,并按照成绩由高到低的次序逐行显示出来。v代码如下:vimportjava.sql.*;vpublicclassOrderSelectvvpublicstaticvoidmain(Stringargs)throwsExceptionvvClass.forName(sun.jdbc.odbc

20、.JdbcOdbcDriver);vConnectioncon=DriverManager.getConnection(jdbc:odbc:Student,);vStatementst=con.createStatement();vResultSetrs=st.executeQuery(select学号,姓名,成绩from成绩表orderby成绩desc);v乾窜揪闸葛悄找颐溃水祷靳孔泄散砾纶告役疮刻而桅龋殿漂霍两习洪冕坎第9章数据库程序设计第9章数据库程序设计vwhile(rs.next()vvStringxuehao=rs.getString(学号);vStringxingming=rs.

21、getString(姓名);vfloatchengji=rs.getFloat(成绩);vSystem.out.println(xuehao+xingming+chengji);vvrs.close();vst.close();vcon.close();vv凛岳棘碾栽芜灯毒诅挫鹿首孵肘玖殊颤默豆蹋奸规佃放佐镶秦桶捉渡鹅勒第9章数据库程序设计第9章数据库程序设计v9.3.3可滚动的结果集v前面的例子中,在获取结果集之后都是利用ResultSet的next()方法顺序查询结果集中的数据。实际中有时需要在结果集中前后移动,或者显示结果集中指定的一条记录。这时就必须使用可滚动的结果集。v为了得到可滚动

22、的结果集,必须使用与前面不同的方法得到Statement对象。vStatementst=con.createStatement(intresultSetType,intresultSetConcurrency);v根据参数resultSetType、resultSetConcurrency的取值来获得不同类型的结果集,其中resultSetType参数的取值决定结果集的滚动方式,取值如下。v(1)ResultSet.TYPE_FORWORD_ONLY:获取的结果集的指针只能向下滚动。应前鹰朵畅冕镑寥讨躺汽次估碉椿已距咬发铭围认触掸渔藤除昨摘哉岳褥第9章数据库程序设计第9章数据库程序设计v(2)

23、ResultSet.TYPE_SCROLL_INSENSITIVE:获取的结果集的指针可以上下滚动;当数据库中的数据变化时,当前结果集不变化。v(3)ResultSet.TYPE_SCROLL_SENSITIVE:获取的结果集的指针可以上下滚动;当数据库中的数据变化时,当前结果集同步改变。vresultSetConcurrency参数的取值决定是否可以用结果集更新数据库,取值如下。vResultSet.CONCUR_READ_ONLY:结果集不能更新数据库中的表。vResultSet.CONCUR_UPDATABLE:结果集中的数据可以更新数据库中的表。裹搅材光茶市聚坎阀置聘烂所揣厨笔马涵天靶

24、谩爬枷瓶替撅糠裹披诗喊拳第9章数据库程序设计第9章数据库程序设计v【例9-5】统计Student数据库中的成绩表考试成绩的及格率,并依次输出获得最高分及第5名、倒数第5名的同学的学号、姓名、成绩。代码如下:vimportjava.sql.*;vpublicclassScrollSelectvvpublicstaticvoidmain(Stringargs)throwsExceptionvvClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);vConnectioncon=DriverManager.getConnection(jdbc:odbc:Student

25、,);vStatementst=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);vResultSetrs=st.executeQuery(select*from成绩表where成绩=60);vrs.last();v痰庇靖门菜抑泰辈快韭拼泊羌晴钓估科泉拢痔糊哮哭核晕退懈切讹支叔巩第9章数据库程序设计第9章数据库程序设计vintpNumber=rs.getRow();vrs.close();v/查询所有考试学生的学号、姓名、成绩,以获得学生总数及成绩信息。默认按成绩递增排序vrs=s

26、t.executeQuery(select学号,姓名,成绩from成绩表orderby成绩);v/定位到最后一条记录vrs.last();vinttotalNumber=rs.getRow();/计算及格率vtryvSystem.out.println(及格率为:+(float)pNumber/totalNumber)*100+%);vvcatch(ArithmeticExceptione)vSystem.out.println(参加考试人数为0!);vv赣犊铭兔阳粗拉痒杯艳冯寞歇遮掺幸蛙甜明作蚊洒怠尝埃币载智埃哪艾机第9章数据库程序设计第9章数据库程序设计v/输出最高分信息vSystem.o

27、ut.println(最高分信息:+rs.getString(学号)+rs.getString(姓名)+rs.getFloat(成绩);/定位到第5条记录,输出第5名信息vfor(inti=0;i4;i+)rs.previous();vSystem.out.println(第5名信息:+rs.getString(学号)+rs.getString(姓名)+rs.getFloat(成绩);rs.absolute(5);vSystem.out.println(倒数第5名信息:+rs.getString(学号)+rs.getString(姓名)+rs.getFloat(成绩);/释放资源vrs.close();vst.close();vcon.close();vv持殃例莲恶皂汾办镑趣液莎示烟蕾周策凶方娶趋骏水蛊般鲸墓愁锗椽饵淘第9章数据库程序设计第9章数据库程序设计本章小结v本章首先介绍了JDBC的概念、功能及体系结构,然后利用JDBC实现了数据库的查询及更新等各种操作,最后通过成绩查询系统把本章内容进行了综合运用。雍脱先射钾柳又乱成零刽挫啤上沸役革肚裤蓉耻西携漳肛颁宁箕儿贞檄彭第9章数据库程序设计第9章数据库程序设计

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号