




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JSP纸制教案(7) 第七章对数据库的操作7.1数据源java应用程序与数据库的连接方式有四种,本书中采用JDBC-ODBC方式连接数据库这种连接方式分三个步骤首先,创建一个数据源,其次,加载JDBC-ODBC驱动程序,第三步,建立一个到数据库的连接。 数据源是对数据库的一种映射。 我们可以把数据源理解为数据库本身,一个数据源对应一个数据库。 1)在管理工具中选择ODBC数据源2)双击ODBC数据源图标,选择System DSN选项卡,单击Add按钮,增加新的数据源,如图7-3所示。 此对话框,为新增加的数据源选择驱动程序。 3)因为要访问Microsoft Aess数据库,选择Micosoft AessDriver(*.mdb)选项,单击完成按钮(为数据源选择了驱动程序),出现了设置数据源具体项目的对话框,如图7-4所示。 4)在数据源名(N)后的文本框中为数据源起一个名字,这里起的名字是grade(可以起别的名字),点击选择(S)按钮,为数据源grade选择数据库,这里选择的数据库是E:db.mdb。 配置情况如图7-5所示。 5)最后点击确定按钮,完成了数据源的配置,出现对话框如图7-6所示。 在该对话框中,点击确定按钮,完成数据源grade的配置。 7.2JDBC-ODBC桥接器JDBC-ODBC桥接器就是把应用程序与数据源连接起来的驱动程序。 因此,创建了数据源以后,还要加载JDBC-ODBC桥接器,即加载驱动程序。 下面是加载驱动程序的方式tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);chatch(ClassNotFoundException e)通过Class类的静态方法forName(String driver)加载JDBC-ODBC桥接器。 7.3数据库连接创建了数据源,加载了驱动程序,应用程序还是不能连接到数据库。 应用程序要访问数据库,还必须创建一个到数据库的连接。 即创建一个连接对象。 假设数据源名是“grade”,用户登录系统的帐号是user/password。 下面是获得连接对象的方法Connection conn=DriverManagergetConnection(“jdbc:odbc:grade”,user,password);或者Connection conn=DriverManagergetConnection(“jdbc:odbc:grade”);getConnection()方法是DriverManager类的一个静态方法。 对于Aess数据库连接,可以不要帐号参数就能建立连接对象。 7.4数据库事务处理一般来说,数据库事务处理分两种一种是数据查询,第二种是数据更新。 数据更新包括数据插入、修改和删除。 假设已经连接到某数据库,创建的连接对象是conn。 则数据查询和数据更新步骤如下。 1.数据查询通过以下两个步骤,获得查询结果集rs。 (1)创建语句对象Statement stmt=conncreateStatement(int type,int concurrency); (2)获得查询结果集String sql=select*from tablenamewhere expression;/SQL查询字符串ResultSet rs=stmtexecuteQuery(sql);/获得结果集rs2.数据更新通过以下两个步骤,实现数据更新。 (1)创建语句对象Statement stmt=conncreateStatement(int type,int concurrency); (2)执行更新String sql=sqlStatement;/插入或修改或删除SQL字符串int number=stmtexecuteUpdate(sql);/执行更新操作说明在数据查询、数据更新事务中,一般采用无参的createStatement()方法创建语句对象。 如果事务是随机查询、游动查询和用结果集更新数据库,则应采用createStatement(int type,int concurrency)方法创建语句对象。 下面是对该方法参数的说明。 type的取值决定滚动方式,即结果集中的游标是否能上下滚动。 取值如下?ResultSet.TYPE_FORWORD_ONLY结果集的游标只能向下滚动。 ?ResultSet.TYPE_SCROLL_INSENSITIVE结果集的游标可以上下移动,当数据库变化时,当前结果集不变。 ?ResultSet.TYPE_SCROLL_SENSITIVE返回可滚动的结果集。 当数据库变化时,当前结果集同步改变。 ?concurrency的取值决定是否能用结果集更新数据库。 concurrency取值?ResultSet.CONCUR_READ_ONLY不能用结果集更新数据库中的表。 ?ResultSet.CONCUR_UPDATABLE能用结果集更新数据库中的表。 ?我们可以使用同一个Statement对象来执行查询和更新操作(修改/添加/删除),但是,需要注意,用Statement对象获取结果集的操作,必须在用Statement对象执行更新的操作之前,否则,执行更新的操作会破坏Statement对象获取的结果集。 7.5数据查询按照查询的方式不同,将查询分为顺序查询、游动查询、随机查询、参数查询、排序查询、使用通配符查询。 7.5.1顺序查询?这种查询中,获得的结果集(ResultSet对象)中的游标只能一行行地向下移动。 既不能向上移动游标,也不能跳行移动游标。 ?ResultSet对象由若干行组成。 ResultSet对象一次只能看到一个数据行,使用next()方法,使游标移到下一行记录。 ?ResultSet对象可以用字段索引(第一列是1,第二列是2等等)为参数,获得对应的字段值(记录中的数据项),如方法getXxx(int columnIndex);也可以用字段名为参数,获得对应的字段值(记录中的数据项),如方法getXxx(String columnName)。 ResultSet对象的常用方法如表7-1所示。 例子7.1查询英语成绩及格的学生。 学生成绩保存在表(students)中,表结构为sudents(number,name,math,english,phics)。 在db.mdb库中创建表students。 程序结构程序名ex7_1.jsp程序算法1.分别声明连接类型,语句类型,结果集类型的变量con/sql/rs。 2.加载驱动程序sun.jdbc.odbc.JdbcOdbcDriver。 3.获取连接对象con4.获取语句对象sql5.获取结果集对象rs6.输出表头7.输出结果集(rs)中的所有记录7.5.2游动查询有时,我们需要在结果集中前后移动游标,以便获取某条记录。 这时,我们必须返回一个可滚动的结果集。 为了获取可滚动的结果集,我们必须使用下述方法先获得一个Statement对象Statement stmt=conncreateStatement(int type,int concurrency);通过上述Statement对象获得的结果集是可滚动结果集。 可滚动结果集(ResultSet)还可用到的方法如下?public booleanprevious()将游标向上移动,该方法返回boolean型数据,当移动结果集第一行之前时返回false。 ?public voidbeforeFirst()将游标移到结果集的初始位置,即在第一行之前。 ?public voidafterLast()将游标移到结果集最后一行之后?public voidfirst()将游标移到结果集的第一行。 ?public voidlast()将游标移到结果集的最后一行。 ?public booleanisAfterLast()判断游标是否在最后一行之后。 ?public booleanisBeforeFirst()判断游标是否在第一行之前。 ?public booleanisFirst()判断游标是否指向结果集的第一行。 ?public booleanisLast()判断游标是否指向结果集的最后一行。 ?public intgetRow()得到当前游标所指向的行号。 行号从1开始,如果结果集没有行,返回0。 ?public booleanabsolute(int row)将游标移到参数row指定的行号。 说明如果row取负值,就是倒数的行数。 asolute(-1)表示移到最后一行,asolute(-2)表示移到倒数第二行。 当移到第一行前面或最后一行的后面时,该方法返回false。 例子7.2从表(students)的最后一行开始,以逆序方式输出记录。 然后单独输出物理表中的第5条记录。 问题分析从题目要求可知,结果集中的游标必须能上下游动,因此,必须用带参数的createStatement(int type,int concurrency)方法创建Statement类型的对象。 程序结构程序名ex7_2.jsp程序算法1.分别声明连接类型,语句类型,结果集类型的变量con/sql/rs。 2.加载驱动程序sun.jdbc.odbc.JdbcOdbcDriver。 3.获取连接对象con4.获取语句对象sql5.获取结果集对象rs6.游标移到最后一行7.获取最后一行的行号8.输出记录数9.输出表头10.将游标移动到最后一行之后11.逆序输出输出结果集(rs)中的所有记录(从表的最后一行开始输出记录)12.将游标移到第5条记录13.输出第5条记录。 7.5.3随机查询例子7.3从学生表(students)中随机抽取4条记录,并计算4条记录的数学成绩的平均值。 问题分析产生1到num之间的随机数计算公式如下int i=(int)(Math.random()*num+1);i的值是1到num之间的随机数。 在程序中,根据该随机数,把游标移到相应的行,并输出该行。 程序结构程序名ex7_3.jsp程序算法1分别声明连接类型,语句类型,结果集类型的变量con/sql/rs。 加载驱动程序sun.jdbc.odbc.JdbcOdbcDriver。 获取连接对象con获取语句对象sql获取结果集对象rs游标移到最后一行获取表中记录总数number向vector中添加number个Integer型对象(该对象保存了表的行号)。 输出表头10.从vector中抽取四个数字对象,以每个数字对象为行号,输出该行号对应的记录。 11.求出4条记录数学成绩的平均值,并输出平均值。 7.5.4参数查询例子7.4对学生表(students)分别按姓名查询和按成绩查询。 问题分析由三个页面完成此功能。 一个页面提供查询输入界面;一个页面按姓名查询数据;一个页面按成绩查询数据。 程序结构ex7_4.jsp页面提供查询条件输入窗口,按姓名查询时,其姓名参数被提交给byname.jsp页面,按成绩查询时,其成绩参数被提交给byscore.jsp页面。 byname.jsp页面查询出指定姓名的学生;byscore.jsp页面查询出指定成绩的学生。 三个页面的交互关系如图7-7所示。 程序算法ex7_4.jsp:创建一个表单,该表单包含一个文本框,文本框用于录入姓名。 创建一个表单,该表单包含四个文本框,四个文本框用于录入英语成绩和数学成绩的查询范围。 byname.jsp:1获取表单中的姓名参数name2分别声明连接类型,语句类型,结果集类型的变量con/sql/rs。 3加载驱动程序sun.jdbc.odbc.JdbcOdbcDriver。 4获取连接对象con5获取语句对象sql6构造SQL语句字符串condition7获取结果集对象rs8输出表头9输出结果集(rs)中的所有记录byscore.jsp:1获取表单中的英语和数学成绩范围englishmax/englishmin;mathmax/mathmin2分别声明连接类型,语句类型,结果集类型的变量con/sql/rs。 3加载驱动程序sun.jdbc.odbc.JdbcOdbcDriver。 4获取连接对象con5获取语句对象sql6构造SQL语句字符串condition7获取结果集对象rs8输出表头9输出结果集(rs)中的所有记录7.5.5排序查询可以在SQL语句中使用order by子句对查询记录进行排序。 例子7.5对学生表(students)分别按姓名、英语成绩、总成绩进行排序,输出成绩。 程序结构ex7_5.jsp页面将排序方式提交给byorder.jsp页面;byorder.jsp页面根据排序方式,查询数据并输出。 程序算法ex7_5.jsp:创建一个表单,包含三个单选按钮,每个单选按钮代表一种排序方式。 byorder.jsp:1从表单中获取排序方式,保存到变量name中。 2.分别声明连接类型,语句类型,结果集类型的变量con/sql/rs。 3加载驱动程序sun.jdbc.odbc.JdbcOdbcDriver。 4获取连接对象con5获取语句对象sql6构造SQL语句字符串(condition),该串指定了记录的排序方式。 7获取结果集对象rs8输出表头9输出结果集(rs)中的所有记录7.5.6使用通配符查询可以用SQL语句操作符like进行模式匹配。 用%代替一个或者多个字符,用一个下划线_代替一个字符。 例如,下面的SQL语句查询姓氏为王的记录。 Select*from studentswhere namelike?王%?例子7.6按姓氏查询表(students)。 程序结构ex7_6.jsp页面将姓氏参数提交给byname2.jsp页面;byname2.jsp页面按姓氏通配符查询数据。 程序算法ex7_6.jsp:创建一个表单,该表单包含一个文本框,可在此文本框中录入姓氏参数。 byname2.jsp1获取姓名参数name2创建查询通配字符串name=%+name+%3分别声明连接类型,语句类型,结果集类型的变量con/sql/rs。 4加载驱动程序sun.jdbc.odbc.JdbcOdbcDriver。 5获取连接对象con6获取语句对象sql7构造SQL语句字符串condition8获取结果集对象rs9输出表头10输出结果集(rs)中的所有记录7.6数据更新数据更新操作包括修改数据、添加数据、删除数据。 7.6.1修改数据修改数据是根据表中某一关键字,修改满足某些条件的记录。 例子7.7以姓名为关键字,修改表(students)中的某些数据。 程序结构ex7_7.jsp页面将要修改的数据提交给newResult.jsp页面;newResult.jsp页面执行数据修改,并将修改后的表数据显示出来。 两页面的交互关系如图7-9所示。 程序算法ex7_7.jsp1.创建表单,该表单包含4个文本框,分别用于录入关键字姓名(name),数学成绩(math),英语成绩(english),物理成绩(physics)。 2.输出修改前表中的数据。 newResult.jsp:1从表单中获取关键字姓名name2从表单中获取修改后的成绩(newMath/newEnglish/newPhysics)3分别声明连接类型,语句类型,结果集类型的变量con/sql/rs。 4加载驱动程序sun.jdbc.odbc.JdbcOdbcDriver。 5获取连接对象con6获取语句对象sql7构造三个SQL语句字符串condition1/condition2/condition38执行修改操作9显示修改后的表的记录。 7.6.2添加数据例子7.8向表(students)中添加记录。 程序结构ex7_8.jsp页面将录入的数据提交给newDatabase.jsp页面;newDatabase.jsp页将数据添加到表(students)中,并显示添加数据后表中的记录。 两个页面的交互关系如图7-10所示。 程序算法ex7_8.jsp:1.创建一个表单,包含5个文本框,分别用于录入学号(number),姓名(name),数学(math),英语(english),物理(physics)成绩。 2输出添加记录前表(students)中的记录。 newDatabase.jsp:1从表单中获取录入的数据分别保存到以下变量中number/name/m/e/p。 2分别声明连接类型,语句类型,结果集类型的变量con/sql/rs。 3加载驱动程序sun.jdbc.odbc.JdbcOdbcDriver。 4获取连接对象con5获取语句对象sql6构造SQL插入语句字符串condition。 7执行添加操作8输出添加记录后的表中全部数据。 7.6.3删除数据例子7.9以学号为关键字,删除表(students)中的某些数据。 程序结构ex7_9.jsp页面将要删除的关键字值提交给delete.jsp页面;delete.jsp页面根据关键字的值,删除表中的相应记录。 程序算法ex7_9.jsp:1创建一个表单,该表单包含一个文本框(接受学号关键字值的录入)。 2输出删除数据前表的数据。 delete.jsp:1从表单获取关键字段学号的值number。 2分别声明连接类型,语句类型,结果集类型的变量con/sql/rs。 3加载驱动程序sun.jdbc.odbc.JdbcOdbcDriver。 4获取连接对象con。 5获取语句对象sql。 6构造SQL删除语句字符串deleteALL。 7执行删除操作。 8输出删除记录后的表数据。 7.7分页显示记录?当要显示的数据记录太多时,必须采用分页技术。 这里对数据库表中的记录进行分页显示。 例子7.10分页显示表(students)中的数据。 问题分析假设要显示的总记录数为num,每页显示记录数为pageSize,则总页数(pageCount)的计算公式如下如果num除以pageSize的余数大于0,则总页数等于num除以pageSize的商加1。 如果num除以pageSize的余数等于0,则总页数等于num除以pageSize的商。 即pageCount=(num%pageSize)=0?(num/pageSize):(num/pageSize+1)如果准备显示第k页的内容,应当把游标移到第(k-1)*pageSize+1条记录处。 程序结构程序名:ex7_10.jsp程序算法1设置页面大小pageSize=8(表示每页8条记录)。 2创建一个表单,该表单包含一文本框,在此框中输入客户想显示的记录的页码号。 3计算表中记录总数numRow。 4计算分页后总页数:pageCount。 5从表单中获取要显示记录的页码号showPage。 6计算showPage页的第一条记录在表中的行号posion。 7使游标指向posion。 8从当前游标开始,输出pageSize条记录。 7.8网上投票例子7.11创建一个网上投票系统。 问题分析首先要创建两个表。 一个是ip表,该表用来存放投票人的ip地址,表的结构是ip(ip);一个是candidate表,该表用来存放候选人名单及候选人得票数,表的结构是candidate(name,count)。 该系统由三个页面组成。 一个页面展示投票界面;一个页面将客户投票选择保存到candidate表中,实现投票统计;一个页面显示投票结果。 程序结构ex7_11.jsp页面将客户的投票选择提交给vote.jsp页面;vote.jsp页面将客户的投票选择保存到candidate表中,并将客户的ip地址保存到ip表中;showvote.jsp页面查看投票结果。 程序算法ex7_11.jsp:1构造一个StringBuffer类型的空对象nameList2分别声明连接类型,语句类型,结果集类型的变量con/sql/rs。 3加载驱动程序sun.jdbc.odbc.JdbcOdbcDriver。 4获取连接对象con5获取语句对象sql6获取结果集对象rs7把构成表单的字符串加入nameList对象中8把构成表格的字符串加入nameList对象中(在表单中加入一个表格)9把构成表头的字符串加入nameList对象中(表格的表头)10把rs中的name值和单选按钮分别以字符串的格式加入nameList对象中11关闭连接对象con12.将nameList对象中的字符串输出,即输出表单(以表格的方式显示表单数据),该表单为客户提供投票选择(从第1到12步,创建第1个表单)13创建第2个表单,该表单查看投票情况vote.jsp:1声明一个类变量,统计投票的总数total2定义一个同步方法countTotal(),实现投票总数total加13定义标识(vote),用vote标识客户是否有权投票。 vote值为true,表示有权投票,vote值为false表示无权投票,给vote赋初值为true(允许投票)。 .4从表单获取客户选择的候选人name5从表单获取投票客户的ip地址6加载驱动程序7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 零售企业数字化供应链协同中的供应链可视化技术应用报告
- 2025年元宇宙社交平台虚拟社交平台社交焦虑缓解与用户体验研究
- 乡村振兴中的职业技能培训:乡村旅游人才培养报告
- 2025年医院信息化建设与医患沟通平台初步设计评估报告
- 2025年餐饮业食品安全监管信息化技术应用与餐饮企业食品安全风险预警体系建设报告
- 2025年医药企业研发外包(CRO)在临床试验数据隐私保护中的法律法规报告001
- 周篮嫂的课件
- 2025年CCS项目在能源领域应用的经济效益与投资决策支持研究报告
- 5G+AI融合的2025年科技互联网产业创新生态构建报告
- 环保产业园2025年循环经济发展模式中的绿色供应链管理与创新研究报告
- 小学信息化培训:AI赋能教学与教师能力提升
- 项目工程管理铁三角
- 肿瘤病人的心理特点与心理护理
- 艾滋病梅毒乙肝防治培训
- 2025年高考英语复习知识清单(全国)专题17 部分倒装和完全倒装十五种典型用法(讲案)解析版
- 《夕阳红的守护:老年人权益保障法主题课件》
- 改装各类防弹车行业深度研究报告
- SCR脱硝催化剂体积及反应器尺寸计算表
- 现代艺术教育理念探析-洞察分析
- 2025年山东省济南市槐荫区所属事业单位考试笔试高频重点提升(共500题)附带答案详解
- AI赋能科技营销
评论
0/150
提交评论