JSP中使用数据库 (2).ppt
《JSP中使用数据库 (2).ppt》由会员分享,可在线阅读,更多相关《JSP中使用数据库 (2).ppt(64页珍藏版)》请在三一办公上搜索。
1、知识回顾:1 JDBC的工作过程2 ODBC3 连接不同数据库的方式4 数据库的顺序查询,1 其它查询 2 更新记录3 添加记录4 删除记录5 分页显示记录6 查询Excel表格7 使用同步连接8 PreparedStatement对象应用,本讲内容:,游动查询 前面我们学习了使用Result的next()方法顺序地查询数据,但有时候我们需要在结果集中前后移动、或显示结果集指定的一条记录等等。这时,我们必须要返回一个可滚动的结果集。为了得到一个可滚动的结果集,和上一节不同的是,我们必须使用下述方法先获得一个Statement对象:Statement stmt=con.createStateme
2、nt(int type,int concurrency);然后,根据参数的type、concurrency的取值情况,stmt返回相应类型的结果集:ResultSet re=stmt.executeQuery(SQL语句);,type的取值决定滚动方式,取值可以是:ResultSet.TYPE_FORWORD_ONLY:结果集的游标只能向下滚动。ResultSet.TYPE_SCROLL_INSENSITIVE:结果集的游标可以上下移动,当数据库变化时,当前结果集不变。ResultSet.TYPE_SCROLL_SENSITIVE:返回可滚动的结果集,当数据库变化时,当前结果集同步改变。Con
3、currency 取值决定是否可以用结果集更新数据库,Concurrency取值:ResultSet.CONCUR_READ_ONLY:不能用结果集更新数据库中的表。ResultSet.CONCUR_UPDATETABLE:能用结果集更新数据库中的表。,滚动查询经常用到ResultSet的下述方法:public boolean previous():将游标向上移动,该方法返回boolean型数据,当移到结果集第一行之前时返回false.public void beforeFirst:将游标移动到结果集的初始位置,即在第一行之前。public void afterLast():将游标移到结果集最
4、后一行之后。public void first():将游标移到结果集的第一行。public void last():将游标移到结果集的最后一行。public boolean isAfterLast():判断游标是否在最后一行之后。public boolean isBeforeFirst():判断游标是否在第一行之前,public boolean ifFirst():判断游标是否指向结果集的第一行。public boolean isLast():判断游标是否指向结果集的最后一行。public int getRow():得到当前游标所指行的行号,行号从1开始,如果结果集没有行,返回0 public
5、 boolean absolute(int row):将游标移到参数row指定的行号。注意,如果row取负值,就是倒数的行数,absolute(-1)表示移到最后一行,absolute(-2)表示移到倒数第2行。当移动到第一行前面或最后一行的后面时,该方法返回false。,在下面的例子中,首先将游标移动到最后一行,然后再获取行号,这样就获得表中的记录数目。然后我们倒序输出结果集中的记录,即首先输出最后一行。最后单独输出第5条记录。例子dbf_youdong.jsp:,%String name,number;int math,physics,english;Connection con;Stat
6、ement sql;ResultSet rs;,tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundException e)try con=DriverManager.getConnection(jdbc:odbc:sun,sa,);sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);/返回可滚动的结果集:rs=sql.executeQuery(SELECT*FROM students);/将游标移动
7、到最后一行:rs.last();/获取最后一行的行号:int lownumber=rs.getRow();,out.print(该表共有+lownumber+条记录);out.print(现在逆序输出记录:);out.print();out.print();out.print(+学号);out.print(+姓名);out.print(+数学成绩);out.print(+英语成绩);out.print(+物理成绩);out.print();/为了逆序输出记录,需将游标移动到最后一行之后:rs.afterLast();while(rs.previous()out.print();number=r
8、s.getString(1);out.print(+number+);,name=rs.getString(2);out.print(+name+);math=rs.getInt(数学成绩);out.print(+math+);english=rs.getInt(英语成绩);out.print(+english+);physics=rs.getInt(物理成绩);out.print(+physics+);out.print();out.print();out.print(单独输出第5条记录);rs.absolute(5);number=rs.getString(1);,out.print(nu
9、mber+,);name=rs.getString(2);out.print(name+,);math=rs.getInt(数学成绩);out.print(math+,);english=rs.getInt(英语成绩);out.print(english+,);physics=rs.getInt(物理成绩);out.print(physics+。);con.close();catch(SQLException e1)%,随机查询 在下面的例子中,我们随机从结果集中取出4条记录,并计算4条记录的数学成绩的平均值。用Math类的静态方法random()可以产生一个大于0小于1的随机数,再用下述公式
10、:int i=(int)(Math.random()*number+1);产生一个1到number之间的随机数,根据这个随机数将游标移动到相应的行,并输出该行,算法的进一步细节可见下述例子4。,例子dbf_suiji.jsp:,%String xuehao,name;int math;Connection con;Statement sql;ResultSet rs;tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundException e),try con=DriverManager.getConnection(
11、jdbc:odbc:sun,sa,);sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);/返回可滚动的结果集:rs=sql.executeQuery(SELECT*FROM students);out.print();out.print();out.print(+学号);out.print(+姓名);out.print(+数学成绩);out.print();/将游标移动到最后一行:rs.last();,/获取最后一行的行号:int lownumber=rs.getRow();/
12、获取记录数:int number=lownumber;double sum=0;int 抽取数目=4;int old_i=0,0,0,0;int k=抽取数目;int j=0;while(抽取数目0)int i=(int)(Math.random()*number+1);/随机获取一个1到number之间的数。boolean boo=false;for(int m=0;mold_i.length;m+),/查找该行是否已被取出。if(i=old_im)boo=true;if(boo)continue;/假如该行已被取出,结束本次循环,继续产生随机数。rs.absolute(i);/游标移到这一
13、行。out.print();xuehao=rs.getString(1);/获取该行学号字段的值。out.print(+xuehao+);name=rs.getString(2);/获取该行姓名字段的值。out.print(+name+);math=rs.getInt(数学成绩);,/获取改行数学成绩字段的值 out.print(+math+);out.print();sum=sum+math;抽取数目-;old_ij=i;/记录已取出的行号。j+;out.print();out.print(平均成绩是:+sum/k);con.close();catch(SQLException e1)%,更
14、新记录我们可以使用SQL语句更新记录中字段的值。Statement对象调用方法:public int executeUpdate(String sqlStatement);通过参数sqlStatement指定的方式实现对数据库表中记录的字段值的更新,例如,下述语句将表students中王名同学的数学字段的值更新88:executeUpdate(UPDATE students SET 数学成绩=88 WHERE 姓名=王名);注:你可以使用一个Statement对象进行更新和查询操作,但需要注意的是,当查询语句返回结果集后,没有立即输出结果集的记录,而接着执行了更新语句,那么结果,集就不能输出记
15、录了。要想输出记录就必须重新返回结果集。在下面的例子1中,可以更新学生的各科的成绩。在dbf_gengxin.jsp页面提交学生的学号以及这个学生新的成绩到newResult.jsp页面,该页面负责更新记录的字段值。,输入要修改成绩的同学的学号:输入新的数学成绩:输入新的英语成绩:,输入新的物理成绩:数据库更新前的数据记录是:%String name,number;int math,physics,english;Connection con;Statement sql;ResultSet rs;tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);ca
16、tch(ClassNotFoundException e)try con=DriverManager.getConnection(jdbc:odbc:sun,sa,);sql=con.createStatement();,rs=sql.executeQuery(SELECT*FROM students);out.print();out.print();out.print(+学号);out.print(+姓名);out.print(+数学成绩);out.print(+英语成绩);out.print(+物理成绩);out.print();while(rs.next()out.print();num
17、ber=rs.getString(1);out.print(+number+);name=rs.getString(2);out.print(+name+);,math=rs.getInt(数学成绩);out.print(+math+);english=rs.getInt(英语成绩);out.print(+english+);physics=rs.getInt(物理成绩);out.print(+physics+);out.print();out.print();con.close();catch(SQLException e1)%,newResult.jsp,%/获取提交的学号:String
18、number=request.getParameter(”number);if(number=null)number=;byte b=number.getBytes(ISO-8859-1);number=new String(b);,/获取提交的新的数学成绩:String newMath=request.getParameter(math);if(newMath=null)newMath=;/获取提交的新的英语成绩:String newEnglish=request.getParameter(english);if(newEnglish=null)newEnglish=;/获取提交的新的物理成
19、绩:String newPhysics=request.getParameter(physics);if(newPhysics=null)newPhysics=;,Connection con=null;Statement sql=null;ResultSet rs=null;tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundException e)try con=DriverManager.getConnection(jdbc:odbc:sun,sa,);sql=con.createStatement();St
20、ring condition1=“UPDATE students SET 数学成绩=”+newMath+“WHERE 学号=+number+,condition2=UPDATE students SET 英语成绩=+newEnglish+WHERE 学号=+number+,condition3=UPDATE students SET 物理成绩=+newPhysics+WHERE 学号=+number+;,/空值不操作:if(newMath.equals()condition1=;if(newPhysics.equals()condition2=;if(newEnglish.equals()co
21、ndition3=;/执行更新操作:sql.executeUpdate(condition1);sql.executeUpdate(condition2);sql.executeUpdate(condition3);/显示更新后的表中的记录:%,更新后的表的记录:);out.print();out.print(+学号);out.print(+姓名);out.print(+数学成绩);out.print(+英语成绩);out.print(+物理成绩);out.print();while(rs.next()out.print();out.print(+rs.getString(1)+);out.p
22、rint(+rs.getString(2)+);,out.print(+rs.getInt(数学成绩)+);out.print(+rs.getInt(英语成绩)+);out.print(+rs.getInt(物理成绩)+);out.print();out.print();con.close();catch(SQLException e)%,添加记录 使用SQL语句添加新的记录,Statement对象调用方法:public int executeUpdate(String sqlStatement);通过参数sqlStatement指定的方式实现向数据库表中添加新记录,例如,下述语句将向表stu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSP中使用数据库 2 JSP 使用 数据库

链接地址:https://www.31ppt.com/p-6510398.html