实验10分页显示记录 一、实验目的 1了解数据库,以及不同数据库的风别」 2.熟练用JDBC.ODBC桥来访问数据库,能灵活使用各种SQL来进行数据库的操作 3.掌握JSP与数据库的连接技术- JDBC,掌握JSP数据库编程技术。 二、实验要求 1.上机调试运行课上所讲JSP页面。 2.分页显示查询结果。 三、实验内容 (一)上课例子 ·将一个简单的JSP页面中的java程序片代码负责连接到数据源mymoon,.查询 employee表中salary字段值大于3000的全部记录。源代码如下 ShowByJdbcOdbc.isp <%page contentType="text/html:charset=GB2312"%> <%page import="java.sal."%> <HTML><BODY bgcolor=cyan> Connection con Statement sql; ResultSet rs. try Class.forName("sun.jdbe.odbe.JdbcOdbeDriver"); out.print(e); try {con=DriverManager.getConnection("jdbc:odbe:mymoon","sa","sa"); sql-con.createStatement(: out.print("table border-2>) outprint("<tr>"); outprint("<th width=100>"+"雇员号"方 out print("<th width=100>"+"姓名", outprint("<th width=50>+"出生日期")
实验 10 分页显示记录 一、实验目的 1. 了解数据库,以及不同数据库的区别。 2. 熟练用 JDBC-ODBC 桥来访问数据库 , 能灵活使用各种 SQL 来进行数据库的操作 。 3. 掌握 JSP 与数据库的连接技术——JDBC,掌握 JSP 数据库编程技术 。 二、实验要求 1.上机调试运行课上所讲 JSP 页面。 2.分页显示查询结果。 三、实验内容 (一) 上课例子 将一个简单的 JSP 页面中的 java 程序片代码负责连接到数据源 mymoon,查询 employee 表中 salary 字段值大于 3000 的全部记录。源代码如下。 ShowByJdbcOdbc.jsp <%@ page contentType="text/html;charset=GB2312" %> <%@ page import="java.sql.*" %> <HTML><BODY bgcolor=cyan> <% Connection con; Statement sql; ResultSet rs; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(ClassNotFoundException e) { out.print(e); } try { con=DriverManager.getConnection("jdbc:odbc:mymoon","sa","sa"); sql=con.createStatement(); rs=sql.executeQuery("SELECT * FROM employee WHERE salary>3000"); out.print("<table border=2>"); out.print("<tr>"); out.print("<th width=100>"+"雇员号"); out.print("<th width=100>"+"姓名"); out.print("<th width=50>"+"出生日期");
out print"<th width=50>+"薪水") out.print("<TR" while(rs.next() out.print("<tr>"); out.print("<td>"+rs.getString(1)+</d>"): out.print("<td>"+rs.getString(2)+"</d>): outprint("td+rs getDate("birthday"+"<) outprint("d>"+rs getFloat("salary")) out.print("</tr>"): outprint("<table>"): con.close( catch(SQLException e) out print(e): o/> /BODY></HTML 编译并运行该程序,如有错误请改正 (二)分页显示记录 ·创建bean的源文件ShowRecordByPage,java package database.operation import java.sql.* import com.sun rowset. publie class ShowRe cordByPage int pageSize=10: ∥每页显示的记录数 int pageAllCount=0 ∥分页后的总页数 int showPage=1 川当前是示页 StringBuffer presentPageResult ∥品示当前页内容 CachedRowSetlmpl rowSet String data seName- String tableName=""; 表的名宁 String user=" ∥用广 String password="" ∥密码 g字段=new String[100] 字个数。 public ShowRecordByPage( {presentPageResult=new StringBuffer() try Class.forName("com.micr osoft.sqlserver.jdbc.SQLServerDriver")newInstance(). catch(Exception e)
out.print("<th width=50>"+"薪水"); out.print("</TR>"); while(rs.next()) { out.print("<tr>"); out.print("<td >"+rs.getString(1)+"</td>"); out.print("<td >"+rs.getString(2)+"</td>"); out.print("<td >"+rs.getDate("birthday")+"</td>"); out.print("<td >"+rs.getFloat("salary")+"</td>"); out.print("</tr>") ; } out.print("</table>"); con.close(); } catch(SQLException e) { out.print(e); } %> </BODY></HTML> 编译并运行该程序,如有错误请改正。 (二)分页显示记录 创建 bean 的源文件 ShowRecordByPage.java: package database.operation; import java.sql.*; import com.sun.rowset.*; public class ShowRecordByPage { int pageSize=10; //每页显示的记录数 int pageAllCount=0; //分页后的总页数 int showPage=1 ; //当前显示页 StringBuffer presentPageResult; //显示当前页内容 CachedRowSetImpl rowSet; //用于存储 ResultSet 对象 String databaseName=""; //数据库名称 String tableName=""; //表的名字 String user="" ; //用户 String password="" ; //密码 String 字段[]=new String[100] ; int 字段个数=0; public ShowRecordByPage() { presentPageResult=new StringBuffer(); try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); } catch(Exception e){}
pageSiz 字段个数-0 String uri="idbc:sglserver://127.0.0.1:1433:DatabaseName="+databaseName try Connection con=DriverManager.getConnection(uri,user.password): DatabasemetaData metadataz on.getMetaData(). rs1-metadata.getColumns(null.null.tableName.null) int k=0 while(rs1.next()) {字段个数+ 字段k]sl.getString(4):∥/获取字段的名字 Statement sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE ResultSet conCUr reAd ONLY ResultSet rs=sql.executeQuery("SELECT*FROM"+tableName): owSe populaters) con.close(). ∥关闭连接 rowSet.last(): int m=rowSet getRow(): ∥总行数 nt=(m%n=0)2(m/n):m/+1)月 catch(Exception exp) public int getPageSize() return pageSize public int getPageAllCount() return pageAllCount: public void setShowPage(int n) showPage=n public int getShowPage() return showPage: public StringBuffer getPresentPageResult( if(showPage>pageAllCount) showPage=1: if(showPage<=0) showPage=pageAllCount
} public void setPageSize(int size) { pageSize=size; 字段个数=0; String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName="+databaseName; try{ Connection con=DriverManager.getConnection(uri,user,password); DatabaseMetaData metadata=con.getMetaData(); ResultSet rs1=metadata.getColumns(null,null,tableName,null); int k=0; while(rs1.next()) { 字段个数++; 字段[k]=rs1.getString(4); //获取字段的名字 k++; } Statement sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs=sql.executeQuery("SELECT * FROM "+tableName); rowSet=new CachedRowSetImpl(); //创建行集对象 rowSet.populate(rs); con.close(); //关闭连接 rowSet.last(); int m=rowSet.getRow(); //总行数 int n=pageSize; pageAllCount=((m%n)==0)?(m/n):(m/n+1); } catch(Exception exp){} } public int getPageSize() { return pageSize; } public int getPageAllCount() { return pageAllCount; } public void setShowPage(int n) { showPage=n; } public int getShowPage() { return showPage; } public StringBuffer getPresentPageResult() { if(showPage>pageAllCount) showPage=1; if(showPage<=0) showPage=pageAllCount;
presentPageResult-show(showPage) return presentPageResult. public StringBuffer show(int page) {StringBuffer str=new StringBuffer(). str.append("<table border=1>"): sr.append( for(inti=0,i<字段个数:i+) {sr,append("<th>"+字段[+"<h>"方 str.append("</tr>"): try{ rowSetabsolute((page-1)"pageSize+1). for(int for(intk=1k<=字段个数:k++) {str.append("<td>"+rowSet.getString(k)+"<d>"); rowset.next()月 catch(SQLException exp) public void setDatabaseName(String s) databaseName=s trim(): public String getDatabaseName( return databaseName. public void setTableName(String s) tableName=s.trim(). public String getTableName( {return tableName; public void setPassword(String s) password=s.trim(): public void setUser(Strings) user=s.trim(); public String getUser()
presentPageResult=show(showPage); return presentPageResult; } public StringBuffer show(int page) { StringBuffer str=new StringBuffer(); str.append("<table border=1>"); str.append("<tr>"); for(int i=0;i<字段个数;i++) { str.append("<th>"+字段[i]+"</th>"); } str.append("</tr>"); try{ rowSet.absolute((page-1)*pageSize+1); for(int i=1;i<=pageSize;i++) { str.append("<tr>"); for(int k=1;k<=字段个数;k++) { str.append("<td>"+rowSet.getString(k)+"</td>"); } str.append("</tr>"); rowSet.next(); } } catch(SQLException exp){} str.append("</table>"); return str; } public void setDatabaseName(String s) { databaseName=s.trim(); } public String getDatabaseName() { return databaseName; } public void setTableName(String s) { tableName=s.trim(); } public String getTableName() { return tableName; } public void setPassword(String s) { password=s.trim();; } public void setUser(String s) { user=s.trim(); } public String getUser()
return user: ◆JSP页面 showByPage.jsp %@page contentType="text/html;charset=GB2312"%> %@page import="javasql.%> tabaseoperation.ShowRecordByPage"scope="session" <isp:setProperty name="look"property="databaseName"value="factory"> <jsp:setProperty name="look"property="tableName"value="employee" jsp:setProperty name="look"property="user"value="sa" jsp:setPropert name="look" property="pass name="look"property="pageSize"value="2 <HTML><BODY 数据库 <jsp:getProperty name="look"property="databaseName" etPro erty r共有 name="look" name operty=-"'tableName"">表的记录将被分页显示。 Sp. <br>每页最多显示jsp:getProperty name=-look'property='pageSize'>条记录e <jsp:setProperty name="look"property="showPage"> <jsp:getProperty name="look"property="presentPageResult"> name="look"property="showPage"P页 一页”按纽查看记录 <tr><td><FORM action=""> <Input type=hidden name="showPage" value="<%=look.getShowPage()-1%>> </td> <td><FORM action="> aecShouPaed)pide <Input name="showPage" </Form> <td> <td><FORM action="*> 输入页码:nputype-text-5> <Input ype-submit ="g"value=-"提交" </td> <td><FORM action="> 输入页f码:<Input type-text name="showPage"size=5>
{ return user; } } JSP 页面 showByPage.jsp <%@ page contentType="text/html;charset=GB2312" %> <%@ page import="java.sql.*" %> <%@ page import="database.operation.*" %> <jsp:useBean id="look" class="database.operation.ShowRecordByPage" scope="session" /> <jsp:setProperty name="look" property="databaseName" value="factory" /> <jsp:setProperty name="look" property="tableName" value="employee" /> <jsp:setProperty name="look" property="user" value="sa" /> <jsp:setProperty name="look" property="password" value="sa" /> <jsp:setProperty name="look" property="pageSize" value="2" /> <HTML><BODY> 数据库 <jsp:getProperty name= "look" property="databaseName"/>中 <jsp:getProperty name= "look" property="tableName"/>表的记录将被分页显示。 <br>共有 <jsp:getProperty name="look" property="pageAllCount"/> 页. <br>每页最多显示<jsp:getProperty name="look" property="pageSize" />条记录。 <jsp:setProperty name= "look" property="showPage" /> <jsp:getProperty name= "look" property="presentPageResult" /> <BR>当前显示第 <jsp:getProperty name= "look" property="showPage" /> 页, <BR>单击“前一页”或“下一页”按纽查看记录 <Table> <tr><td><FORM action=""> <Input type=hidden name="showPage" value="<%=look.getShowPage()-1 %>" > <Input type=submit name="g" value="前一页"> </FORM> </td> <td><FORM action=""> <Input type=hidden name="showPage" value="<%=look.getShowPage()+1 %>" > <Input type=submit name="g" value="后一页"> </Form> </td> <td> <FORM action=""> 输入页码:<Input type=text name="showPage" size=5 > <Input type=submit name="g" value="提交"> </FORM> </td> <td> <FORM action=""> 输入页码:<Input type=text name="showPage" size=5 >