基于javabean的分页显示代码
- 格式:doc
- 大小:45.00 KB
- 文档页数:5
ShowRecordByPage.javapackage 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="user"; //数据库名称String tableName="user_tab"; //表的名字String user="sa" ; //用户String password="123" ; //密码String 字段[]=new String[100] ;int 字段个数=0;public ShowRecordByPage(){ presentPageResult=new StringBuffer();try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newIns tance();}catch(Exception e){}}public void setPageSize(int size){ pageSize=size;字段个数=0;Stringuri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName="+databaseName;try{ Connectioncon=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++;}Statementsql=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(); //关闭连接st();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>");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;}}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"/>表的记录将被分页显示。
java pageinfo用法Java中的PageInfo用于分页查询时获取分页信息,包括总页数、总记录数、当前页码等。
PageInfo类是MyBatis自带的工具类,通过引入mybatis依赖后,可以直接使用。
使用PageInfo需要先进行分页查询,然后将查询结果传入PageInfo构造函数中。
例如:```javaList<User> userList =userMapper.selectByExample(example);PageInfo<User> pageInfo = new PageInfo<>(userList);```其中User是查询结果的实体类,example是查询条件。
通过PageInfo对象可以获取到以下分页信息:- getTotal():获取总记录数- getPages():获取总页数- getPageNum():获取当前页码- getPageSize():获取每页记录数- isHasNextPage():判断是否有下一页- isHasPreviousPage():判断是否有上一页- navigatepageNums(int navigatePages):获取当前页码的前后各navigatePages页码例如,获取总页数代码如下:```javaint total = pageInfo.getPages();```获取当前页码的前后各3页的页码:```javaint[] navigatePageNums = pageInfo.navigatepageNums(3); ```以上就是Java中PageInfo的用法。
MybatisPlus自定义方法实现分页MyBatis Plus是一款基于MyBatis的强大ORM(Object Relational Mapping)框架,提供了很多方便的功能和特性,其中包括分页查询功能。
虽然MyBatis Plus已经提供了默认的分页查询方法,但有时我们可能需要自定义一些分页查询的方法来满足特定的需求。
下面将介绍如何使用MyBatis Plus来自定义方法实现分页查询。
首先,我们需要在项目中引入MyBatis Plus的依赖。
可以在`pom.xml`文件中添加以下依赖:```xml<dependency><artifactId>mybatis-plus-boot-starter</artifactId><version>最新版本</version></dependency>```接下来,我们需要定义一个Mapper接口,在该接口中添加自定义的分页查询方法。
可以在Mapper接口中定义一个方法,参数为`Page`对象和其他查询条件,返回值为`IPage`对象。
```javaimport org.apache.ibatis.annotations.Param;import java.util.List;public interface UserMapper extends BaseMapper<User>```然后,在对应的Mapper.xml文件中编写SQL语句来实现分页查询。
可以使用MyBatis的分页插件`PageHelper`来完成分页查询。
在Mapper.xml中添加以下代码:```xmlSELECT * FROM user WHERE name LIKE CONCAT('%',#{name},'%') </select>```在这个例子中,我们使用`SELECT * FROM user`查询所有符合条件的记录。
1.增删改查功能说明1.1.说明1,功能2,转向页面(重定向)命名:使用DispatchAction,把一组业务相关的方法放在一个类中。
命名如下:ActionForward与页面的命名说明:一般情况下,可以添加和修改使用同一个页面。
1.2.方法声明1.3.列表的流程练习:根据静态页面list.html,改写为list.jsp 1.4.删除的流程传递id参数,指定要被删除的记录的id值。
1.5.添加的流程1.6.修改的流程1.7.表单验证服务器端验证,ActionForm客户端验证:JavaScript1.7.1.服务器端验配置validate=”false”,在Action中自行验证1.7.2.客户端验证2.分页步骤:1,确定显示效果与数据2,定义JavaBean:PageView3,准备显示数据2.1. 显示效果页面显示效果(最多显示10个)1 2 3 4 5 总页码<=10个(共5页),显示所有页码3 4 5 6 7 8 9 10 11 12 显示当前页附近的共10个页码(共13页)1 2 3 4 5 6 7 8 9 10 (前面不足4个)显示前10个页码(共13页)4 5 6 7 8 9 10 1112 13 (后面不足5个)显示后10个页码(共13页)1,条件2,页码2.2. 重用1,分页的页面代码重用:使用<%include%>包含分页信息显示代码(分页用的地址是不同的,由包含页面提供)2,分页的计算逻辑重用:把计算的逻辑放到PageView构造方法中,只接受几个必须参数。
3,支持分页的dao方法:只需要一条查询语句,即可完成总数量与当前页数据的查询。
2.步骤先学习将要用到的知识点,或进行相应的练习。
2009-11-2总结1,分析需求,写出相应的静态页面(效果页面)。
2,设计实体,实体映射,生成表结构(Dao接口与实现类)。
3,分析功能并且定义出相应的Action中的方法,还要写出转向的资源。
MyBatis-Plus 是一个MyBatis 的增强工具,在MyBatis 的基础上只做增强不做改变,为简化开发和提高效率而生。
MyBatis-Plus 提供了一种更为便捷的接口式编程方式,并封装了MyBatis 的常见操作,使得开发更为简单。
在MyBatis-Plus 中,分页功能可以通过`Page` 对象来实现。
以下是一个简单的例子:```java// 创建Page 对象Page<User> page = new Page<>(1, 10); // 第1页,每页显示10条// 设置查询条件page.add(new QueryWrapper<User>().eq("name", "old"));// 执行分页查询IPage<User> userPage = userMapper.selectPage(page, null);// 获取分页信息userPage.getMeta().setTotal(userMapper.selectCount(newQueryWrapper<User>().eq("name", "old")));// 获取数据列表List<User> userList = userPage.getRecords();```在这个例子中,我们首先创建了一个`Page` 对象,设置了要查询的页码和每页显示的条数。
然后,我们通过`QueryWrapper` 设置了查询条件。
接着,我们执行了分页查询,得到了一个`IPage` 对象。
最后,我们通过`IPage` 对象获取了分页信息和数据列表。
注意,这里的`userMapper` 是MyBatis-Plus 自动生成的Mapper 接口的实例。
如果你没有使用MyBatis-Plus 的自动生成功能,你需要自己创建Mapper 接口和实现类。
VBA窗体之ListView分页显⽰实现功能如下:1、指定每页显⽰记录:CmbRecNum_Change代码如下:Option ExplicitDim cnn As ADODB.Connection '声名数据库连接对象变量Dim rst As ADODB.Recordset '声名记录集对象变量Dim rstDS As ADODB.Recordset '声名记录集对象变量Dim rsPage As Integer'⽤于记录当前处于第⼏页'窗体加载时,完成数据库的连接,设置显⽰每页的记录数Private Sub UserForm_Initialize()Dim i As IntegerFor i = 1To20CmbRecNum.AddItem iNextCmbRecNum.ListWidth = 50CmbRecNum.ColumnWidths = 35CmbRecNum.Value = 5'默认⼀页有 5 条记录rsPage = 1'默认第⼀页'建⽴数据库的连接Set cnn = New ADODB.Connection '创建连接对象cnn_open cnn'查询表中数据⽣成记录集Dim sql As Stringsql = "select * from 员⼯ order by 编号 asc"Set rst = New ADODB.Recordsetrst.Open sql, cnn, adOpenKeyset, adLockOptimistic'⽣成 ListView 控件的基本框架结构With ListView1.ColumnHeaders.Clear '清除表头.ListItems.Clear '清除记录.View = lvwReport '设置显⽰⽅式为"报表形式".FullRowSelect = True'允许选中整⾏.Gridlines = True'显⽰⽹格线For i = 0To rst.Fields.Count - 1'显⽰标题,设置标题宽度Select Case TrueCase i = 0.ColumnHeaders.Add , , rst.Fields(i).Name, 50Case i = 2.ColumnHeaders.Add , , rst.Fields(i).Name, 100, lvwColumnCenter Case InStr("8,9", i).ColumnHeaders.Add , , rst.Fields(i).Name, 130Case Else.ColumnHeaders.Add , , rst.Fields(i).Name, 50, lvwColumnCenter End SelectNextEnd WithAddRows rsPageEnd Sub'⾃定义过程,⽤于调整 ListView 控件上显⽰当前页的数据Public Sub AddRows(myPage As Integer)On Error Resume NextDim i As Integer, j As Integer'创建局部 Recordset 对象 rstDB ,保存 rst 记录集中当前页的记录数据Set rstDS = New ADODB.RecordsetFor i = 0To rst.Fields.Count - 1'Append:追加字段rstDS.Fields.Append rst.Fields(i).Name, rst.Fields(i).Type, rst.Fields(i).DefinedSize NextrstDS.Open '打开局部 Recordset 对象 rstDS'PageSize:表⽰记录集每页的记录条数rst.PageSize = Val(CmbRecNum.Value) '重置 rst 每页的记录条数rst.AbsolutePage = myPage '重置 rst 的当前记录页'将 rst 当前页的记录保存到 rstDS 中For i = 1To rst.PageSizerstDS.AddNew '添加 1 条记录For j = 0To rst.Fields.Count - 1rstDS.Fields(j).Value = rst.Fields(j).ValueNextIf rst.EOF Then Exit Forrst.MoveNext '继续赋值Next'在 ListView 控件中显⽰当前页的记录数据rstDS.MoveFirst '定位 rstDS 中的第⼀条记录With ListView1.ListItems.ClearFor i = 1To rstDS.RecordCount.ListItems.Add , , rstDS.Fields(0).Value '添加第1列内容For j = 1To rstDS.Fields.Count - 1.ListItems(i).SubItems(j) = rstDS.Fields(j).Value '添加后续列内容NextIf rstDS.EOF Then Exit ForrstDS.MoveNext '继续赋值NextEnd WithtxtPage.Value = myPage & "/" & rst.PageCountEnd SubSub cnn_open(cnn)With cnn.Provider = "microsoft.ace.oledb.12.0".ConnectionString = "data source=" & ThisWorkbook.Path & "\学⽣管理.accdb".OpenEnd WithEnd SubPrivate Sub btnFirst_Click()rsPage = 1AddRows rsPageEnd SubPrivate Sub btnBefore_Click()If rsPage <> 1ThenrsPage = rsPage - 1AddRows rsPageEnd IfEnd SubPrivate Sub btnNext_Click()If rsPage <> rst.PageCount ThenrsPage = rsPage + 1AddRows rsPageEnd IfEnd SubPrivate Sub btnLast_Click()rsPage = rst.PageCountAddRows rsPageEnd SubPrivate Sub btnClose_Click()rst.Closecnn.CloseSet rst = NothingSet cnn = NothingSet rstDS = NothingUnload MeEnd Sub'组合框Change事件,当改变组合框的值,重新刷新窗体上的记录显⽰Private Sub CmbRecNum_Change()rsPage = 1AddRows rsPageEnd Sub。
最简单的方法用sql实现:select * from table limit start,pageNum说明:start:取数据的定位点[开始是从0开始]pageNum:每次取多少比如:start=0|ageNum=5那么就是说,取1-6 条数据,通过程序实现:jdbc2.0可以通过指针定位List resultlist=new Vector();Connection conn = null;Statement ps = null;ResultSet rs=null;conn=ds.getConnection();ps=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ ONL Y);rs=ps.executeQuery(sql);if(Start > 0)rs.absolute(Start);//定位Address address;for(int recCount = 0; recCount++ < resultPage && rs.next();resultlist.add(address)){//从定位开始,取resultPage数据,先放在一个对象中,然后放在一个list中,这个对象可以是一个hashtable也可以是一个普通的javabean,用来存储数据}JSP+Servlet分页2009-06-12 15:33 JSP+Servlet分页1) 建立一个pojo类,用来向JSP页面传递数据,使用该类的Getter方法获得相应的属性值。
---------------------------------------------------------------------------------public class UserInfo extends BasePojo {private Long userid;private String usertype;private String userurl;private String userdetail;private String username;private String contact;public Long getUserid() {return userid;}public void setUserid(Long userid) {erid = userid;}public String getusertype() {return usertype;}public void setUsertype(String usertype) {ertype = usertype;}public String getUserurl() {return userurl;}public void setUserurl(String userurl) {erurl = userurl;}public String getUserdetail() {return userdetail;}public void setUserdetail(String userdetail) {erdetail = userdetail;}public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getContact() {return contact;}public void setContact(String contact) {this.contact = contact;}}---------------------------------------------------------------------------------2) 通过查询获得所有对象,然后把每个对象依次赋给一个pojo类,通过循环吧每个pojo类添加到一个list里面。
JSP存储二进制文件和分页技术1. 文件存储到数据库将图像以二进制数据格式存储到数据库中,创建bindata的数据表,添加filename(char),binfile(longBlob),当然第一个位置id自动生成,然后创建一个selectImage.jsp页面:<%@page language="java"import="java.util.*"pageEncoding="gb231 2"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName ()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>上传图片</title><meta http-equiv="pragma"content="no-cache"><meta http-equiv="cache-control"content="no-cache"><meta http-equiv="expires"content="0"><meta http-equiv="keywords"content="keyword1,keyword2,keyword3"> <meta http-equiv="description"content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><form name="form1"method="post"action="testimage.jsp"> <p align="center">请选择图片的URL: <input type="file"name="image"/> </p><p align="center"><input type="submit"name="Submit"value="提交"/></p></form></body></html>然后创建一个selectImage.jsp页面,提交图片信息<%@page language="java"import="java.util.*"pageEncoding="gb231 2"%><%@page import="java.sql.*"%><%@page import="java.text.*"%><%@page import="java.io.*"%><%@page import="java.nio.*"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName ()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>存储图片</title><meta http-equiv="pragma"content="no-cache"><meta http-equiv="cache-control"content="no-cache"><meta http-equiv="expires"content="0"><meta http-equiv="keywords"content="keyword1,keyword2,keyword3"> <meta http-equiv="description"content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><%Class.forName("com.mysql.jdbc.Driver").newInstance(); //加载JDBC驱动程序String url="jdbc:mysql://localhost/firstjsp"; //firstjsp为数据库的名称String user="root";String password="lfw123";String filename=request.getParameter("image");filename="C:\\Documents and Settings\\Administrator\\桌面\\12444033Z-0.jpg";//现在的浏览器上传过来的image就只有名字了,没有绝对路径了!!!File file=new File(filename); //获取表单传过来的图片的urltry{out.println("这里对吧?"+filename+"<br/>");//打开文件FileInputStream fin=new FileInputStream(file);//建一个缓冲保存数据ByteBuffer nbf=ByteBuffer.allocate((int)file.length());byte[] array=new byte[1024];int offset=0, len=0;//读取数据while((len=fin.read(array))>0 ){if(len!=1024) nbf.put(array,0,len);else nbf.put(array);offset+=len;}//新建一个数组保存要写的内容byte[] content=nbf.array();//创建数据库连接out.println("content is "+content+"<br/>");Connection conn=DriverManager.getConnection(url, user, pas sword);//保存数据Statement stmt=conn.createStatement( ResultSet.TYPE_SCROLL _INSENSITIVE, ResultSet.CONCUR_UPDATABLE);String sqlstr="select * from bindata where filename='02'";//查找名字为02的文件ResultSet rs=stmt.executeQuery(sqlstr);if(rs.next()){rs.updateBytes(3,content);rs.updateRow();}else{//如果没有,添加,已经有更新,注意,第一个位置是自动编号,所以在2,3位置rs.moveToInsertRow();rs.updateString(2,"02");rs.updateBytes(3,content);rs.insertRow();}rs.close();fin.close();out.println("恭喜,已经将新的记录成功添加到数据库中!");}catch(FileNotFoundException e){e.printStackTrace();out.println("没找到图片?");}catch(IOException e){e.printStackTrace();out.println("没输入?");}%></body></html>最后创建一个showImage.jsp页面,读取图片:<%@page language="java"import="java.util.*"pageEncoding="gb231 2"%><%@page import="java.sql.*"%><%@page import="java.text.*"%><%@page import="java.io.*"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName ()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>显示图片</title><meta http-equiv="pragma"content="no-cache"><meta http-equiv="cache-control"content="no-cache"><meta http-equiv="expires"content="0"><meta http-equiv="keywords"content="keyword1,keyword2,keyword3"> <meta http-equiv="description"content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><%Class.forName("com.mysql.jdbc.Driver");String url="jdbc:mysql://localhost/firstjsp";String user="root";String password="lfw123";Connection conn=DriverManager.getConnection(url,user,password);String sql="select binfile from bindata where filename='02'"; Statement stmt=null;ResultSet rs=null;try{stmt=conn.createStatement();rs=stmt.executeQuery(sql);}catch(SQLException e){out.println("连接OK?");}try{while(rs.next()){response.setContentType("image/jpg");ServletOutputStream sout=response.getOutputStream();InputStream in=rs.getBinaryStream(1); //获取二进制输入流byte[] b=new byte[0x7a120]; //创建byte数组用作缓冲for(int i=in.read(b);i!=-1;){sout.write(b); //写入页面in.read(b); //读取数据}sout.flush();sout.close();}}catch(Exception e){out.println(e);}%></body></html>截图:(long1 vs longpo 转载请注明出处:/lfw2565295@126)(long1 vs longpo 转载请注明出处:/lfw2565295@126)声音,视频也可以二进制数据格式存储到数据库中,方法类似,用到<param>标签等,但这些技术但只是一般的方法,以后能学到更好的(long1 vs longpo 转载请注明出处:/lfw2565295@126) 2. 分页技术使用游标定位,丢弃不属于页面的数据,使用缓存结果集,一次查询所有数据,使用数据库提供的定位集的SQL语句,返回特定行的数据,使用JavaBean实现,建立bean包,然后写个splitPage.java:package bean;import java.sql.*;import java.util.*;public class splitPage {//定义数据库连接对象和结果集对象private Connection con=null;private Statement stmt=null;private ResultSet rs=null;private ResultSetMetaData rsmd=null;//SQL查询语句private String sqlstr;//总记录数目private int rowCount=0;//所分页的逻辑页数private int pageCount=0;//每页显示的记录数目private int pageSize=0;//设置参数值public void setCon(Connection con){this.con=con;if(this.con==null){System.out.println("Failure to get a connection!");}else{System.out.println("Success to get a connection!");}}//初始化,获取数据表中的信息public void initialize(String sql,int pageSize,int ipage){int irows=pageSize*(ipage-1);sqlstr=sql;this.pageSize=pageSize;try{stmt=this.con.createStatement();rs=stmt.executeQuery(this.sqlstr);if(rs!=null){st();this.rowCount=rs.getRow();rs.first();this.pageCount=(this.rowCount-1)/this.pageSize+1; }this.sqlstr=sql+" limit "+irows+","+pageSize;stmt=this.con.createStatement();rs=stmt.executeQuery(this.sqlstr);rsmd=rs.getMetaData();}catch(SQLException e){System.out.println(e.toString());}}//将显示结果存到VECTOR集合类中public Vector getPage(){Vector vData=new Vector();try{if(rs!=null){while(rs.next()){String[] sData=new String[6];for(int j=0; j<rsmd.getColumnCount(); j++){sData[j]=rs.getString(j+1);}vData.addElement(sData);}}rs.close();stmt.close();}catch(SQLException e){System.out.println(e.toString());}return vData;}//获得页面总数public int getPageCount(){return this.pageCount;}//获取数据表中记录总数public int getRowCount(){return this.rowCount;}}建立words数据表,有自动增长的id,有varchar(100)的wtitle,text的wcontent,datetime的wtime,int的uid,不能为空words.jsp:<%@page language="java"import="java.util.*"pageEncoding="gb231 2"%><%@page import="java.sql.*"%><%@page import="java.io.*"%><%@page import="bean.*"%><jsp:useBean id="pages"scope="page"class="bean.splitPage"/><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName ()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"> <%//每页显示的记录数int pageSize=3;String sql="";//当前页int showPage=1;//数据库用户名,密码String userName="root";String password="lfw123";//数据库的url包括连接数据库所用的编码格式String url="jdbc:mysql://localhost:3306/firstjsp?useUnicode=true& characterEncoding=gb2312";//定义连接对象Connection conn=null;%><%try{//加载驱动程序Class.forName("com.mysql.jdbc.Driver");//获得数据库的连接对象conn=DriverManager.getConnection(url,userName,password);}catch(SQLException e){//打印出异常信息out.println(e.toString());}//给pages中参数con赋值pages.setCon(conn);sql="select * from words order by Id";//查询数据表,获得查询结果String strPage=null;//获取跳转到的目的页面strPage=request.getParameter("showPage");if(strPage==null){showPage=1;}else{try{showPage=Integer.parseInt(strPage);}catch(NumberFormatException e){showPage=1;}}pages.initialize(sql, pageSize, showPage);//获取要显示的数据集合Vector vData=pages.getPage();%><html><head><base href="<%=basePath%>"><title>分页显示</title><meta http-equiv="pragma"content="no-cache"><meta http-equiv="cache-control"content="no-cache"><meta http-equiv="expires"content="0"><meta http-equiv="keywords"content="keyword1,keyword2,keyword3"> <meta http-equiv="description"content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body bgcolor="#FFFFFF"text="#000000"><h1align=center>留言簿</h1><div align=center><table border="1"cellspacing="0"cellpadding="0"width="80%"> <tr><th width="20%">编号</th><th width="20%">留言标题</th><th width="30">留言时间</th></tr><%for(int i=0; i<vData.size(); i++){//显示数据String[] sData=(String[])vData.get(i);%><tr><td><%=sData[0]%></td><td align=left><%=sData[1] %></td><td align=left><%//显示留言时间String wtime=sData[3];if(wtime.indexOf(".")>-1){wtime=wtime.substring(0,wtime.indexOf("."));}out.println(wtime);%></td></tr><%}%></table><form action="words.jsp"method="get"target="_self">共<fort color=red><%=pages.getRowCount() %></fort>条<%=pageSize %>条/页第<font color=red><%=showPage %></font>页/共<font color=red><%=pages.getPageCount() %></font>页<a href="words.jsp?showPage=1"target="_self">[首页]</a><%//判断“上一页”连接是否显示if(showPage>1){%><a href="words.jsp?showPage=<%=showPage-1 %>"target="_self">[上一页]</a><%}else{%>[上一页]<%}//判断“下一页”连接是否显示if(showPage<pages.getPageCount()){%><a href="words.jsp?showPage=<%=showPage+1 %>"target="_self" >[下一页]</a><%}else{%>[下一页]<%}%><a href="words.jsp?showPage=<%=pages.getPageCount() %>"tar get="_self">[尾页]</a>转到<select name="showPage"><%for(int x=1; x<=pages.getPageCount(); x++){%><option value="<%=x %>"<%if(showPage==x) out.println("sel ected"); %>><%=x %></option><%}%></select>页<input type="submit"name="go"value="提交"/></form><%//关闭数据库连接conn.close();%></div></body></html>效果:。
java中page分页对象的用法在Java中,Page分页对象通常用于处理数据库查询结果的分页操作。
它包含以下信息:
1.数据列表:Page对象保存了一页的数据列表,通常是一个List 或者数组。
2.当前页数:Page对象记录了当前的页数。
3.每页显示的数据量:Page对象记录了每页显示的数据量,也称为每页大小。
4.总页数:Page对象计算了总页数,根据数据总量和每页大小计算得出。
5.数据总量:Page对象保存了数据库查询结果的总数据量。
Page对象的使用通常包括以下几个步骤:
1.创建一个Page对象,并指定每页大小和当前页数。
例如:Page page = new Page(10, 1)表示每页显示10条数据,当前页为第一页。
2.执行数据库查询操作,得到所有的数据列表和总数据量。
3.根据总数据量和每页大小计算得出总页数,并设置到Page对象中。
4.根据当前页数和每页大小,从数据列表中截取出当前页面的数据,并设置到Page对象中。
5.返回Page对象作为查询结果,将数据列表和分页信息一起返回给前端或者其他业务逻辑。
Page对象可以进一步拓展用来实现更复杂的分页功能,例如支持排序、过滤和动态调整每页大小等操作。
可以根据具体的业务需求,在Page对象中添加相应的字段和方法来支持这些功能。
此外,许多Java的Web框架和持久层框架(如Spring Boot、MyBatis等)已经提供了Page分页对象的封装和支持,简化了分页操作的开发过程,开发人员可以直接使用框架提供的分页功能,而无需手动处理Page对象。
JavaWeb实现分页的四种⽅法⼀.借助数组进⾏分页原理:进⾏数据库查询操作时,获取到数据库中所有满⾜条件的记录,保存在应⽤的临时数组中,再通过List的subList⽅法,获取到满⾜条件的所有记录。
实现:⾸先在dao层,创建StudentMapper接⼝,⽤于对数据库的操作。
在接⼝中定义通过数组分页的查询⽅法,如下所⽰:1 List<Student> queryStudentsByArray();⽅法很简单,就是获取所有的数据,通过list接收后进⾏分页操作。
创建StudentMapper.xml⽂件,编写查询的sql语句:1 <select id="queryStudentsByArray" resultMap="studentmapper">2 select * from student3 </select>可以看出再编写sql语句的时候,我们并没有作任何分页的相关操作。
这⾥是查询到所有的学⽣信息。
接下来在service层获取数据并且进⾏分页实现:定义IStuService接⼝,并且定义分页⽅法: List<Student> queryStudentsByArray(int currPage, int pageSize);通过接收currPage参数表⽰显⽰第⼏页的数据,pageSize表⽰每页显⽰的数据条数。
创建IStuService接⼝实现类StuServiceIml对⽅法进⾏实现,对获取到的数组通过currPage和pageSize进⾏分页:1@Override2public List<Student> queryStudentsByArray(int currPage, int pageSize) {3 List<Student> students = studentMapper.queryStudentsByArray();4// 从第⼏条数据开始5int firstIndex = (currPage - 1) * pageSize;6// 到第⼏条数据结束7int lastIndex = currPage * pageSize;8return students.subList(firstIndex, lastIndex);9 }通过subList⽅法,获取到两个索引间的所有数据。
基于javabean的分页显示代码Jsp代码:<%@page contentType="text/html; charset=GB2312"%><%@page import="java.sql.*"%><%--以下为引入自定义的一个包 --%><%@page import="ShowByPage.*"%><jsp:useBean id="look"class="ShowByPage.showbypage"scope="page"/><jsp:setProperty name="look"property="showpage"param="showpage"/><html><head><title>分页显示</title></head><body><jsp:getProperty name="look" property="result"></jsp:getProperty><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 "><input type=submit name=g value="提交"></form></td></tr></table></body></html>Bean代码:package ShowByPage;import java.sql.*; //用于连接数据库import com.sun.rowset.*;//用于分页显示import LinkDataBase.*; //用于获得和数据库的连接public class showbypage{LinkData Link=new LinkData(); //定义一个连接类的对象int pagesize=3; //每页显示的记录条数int pagenumber=0; //总页数int showpage=1; //默认显示第一页String result=""; //用于返回结果String duan[]={"name","number","pass"}; //用于存放属性CachedRowSetImpl rowSet; //用于存储ResultSet对象//对指定的表进行查询,并且将结果保存在CachedRowSetImpl对象中,同时设置总页数public void setRowSet() throws ClassNotFoundException, SQLException{String sql="SELECT * FROM testone"; //要查询的表Connection conn=Link.getCon(); //获得和数据库的链接StatementSta=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ ONL Y);//定义Statement对象ResultSet rs=Sta.executeQuery(sql); //对表进行查询,将结果存放在rs中rowSet=new CachedRowSetImpl(); //创建行集对象rowSet.populate(rs); //将结果转存到CachedRowSetImpl对象中conn.close(); //关闭连接st(); //移动到最后一行int m=rowSet.getRow(); //获取行号int n=pagesize; //每一显示的记录数pagenumber=((m%n)==0)?(m/n):(m/n+1);//获得总页数}//设置显示页面public void setShowpage(int n) throws ClassNotFoundException, SQLException{setRowSet();if(n>pagenumber||n<1)showpage=1; //异常情况下都返回到第一页else if(0<n&&n<=pagenumber)showpage=n; //正常情况下正常处理else showpage=1;}//获取显示页面的值public int getShowpage(){return showpage;}//设置显示页面的内容public String show() throws SQLException, ClassNotFoundException{setRowSet();StringBuffer buffer=new StringBuffer(); //定义缓存对象String tempresult=""; //存放临时结果buffer.append("<table border=1>"); //读入表buffer.append("<tr>");for(int i=0;i<3;i++){buffer.append("<th>"+duan[i]+"</th>"); //读入数据库的字段}buffer.append("</tr>");rowSet.absolute((showpage-1)*pagesize+1); //定位到指定行for(int j=0;j<pagesize;j++){buffer.append("<tr>");for(int k=1;k<4;k++){buffer.append("<th>"+rowSet.getString(k)+"</th>"); //读入段属性对应的值}buffer.append("</tr>");rowSet.next();}buffer.append("</table>");tempresult=new String(buffer); //将结果转存到tempresult中return tempresult;}//设置结果public void setResult() throws SQLException, ClassNotFoundException{result=show();}//获得结果public String getResult() throws SQLException, ClassNotFoundException{setResult();return result;}}连接数据库代码:package LinkDataBase;import java.sql.*;public class LinkData{String driver="com.mysql.jdbc.Driver";String url="jdbc:mysql://localhost:3306/lportal";String user="root";String password="123";Connection con=null;public Connection getCon() throws ClassNotFoundException {try{Class.forName(driver);con=DriverManager.getConnection(url,user,password);}catch(SQLException e){;}return con;}public void DelCon() throws SQLException{con.close();}}。