JSP_网上搜集的分页及example搜索相关代码

更新时间:2023-06-03 19:57:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

JSP 分页查询关键代码

1. 连接数据库的基类:

package mons;

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;

public class GetConnection {

protected Connection conn = null;//连接字符串

protected PreparedStatement ps = null;//预编译并存储 SQL 指令 protected ResultSet rs = null;//查询结果集

private static final String DRIVER =

"com.microsoft.sqlserver.jdbc.SQLServerDriver";//加载数据库驱动的字符串 private static final String URL = "jdbc:sqlserver://localhost:1433;databaseName=BOOKDB";//连接数据库的字符串

private static final String USERNAME = "sa";//数据库用户名 private static final String PASSWORD = "accp";//数据库用户密码 /**

* 获得数据库连接 * @return */

public Connection getConn() {

Connection conn = null; try {

Class.forName(DRIVER);//加载数据库驱动 conn =

DriverManager.getConnection(URL,USERNAME,PASSWORD);//连接数据库 } catch (ClassNotFoundException e) {

}

}

return conn;

// TODO Auto-generated catch block e.printStackTrace();

// TODO Auto-generated catch block e.printStackTrace();

} catch (SQLException e) {

}

/*

* 释放资源 */

public void closeAll(){ }

try { }

if(rs != null){ }

if(ps != null){ }

if(conn != null){ }

e.printStackTrace(); conn = null; ps = null; rs = null;

conn.close(); ps.close(); rs.close();

} catch (SQLException e) { }finally{

2. 实体类代码:

package com.book.entity;

public class Book {

private String book_publishTime; private String book_synopsis; private double book_price; private String book_author; private String book_num; private String book_name; private int book_id;

public String getBook_publishTime() { }

return book_publishTime;

public void setBook_price(double book_price) { }

this.book_price = book_price; public double getBook_price() { }

return book_price;

public void setBook_num(String book_num) { }

this.book_num = book_num; public String getBook_num() { }

return book_num;

public void setBook_name(String book_name) { }

this.book_name = book_name; public String getBook_name() { }

return book_name;

public void setBook_id(int book_id) { }

this.book_id = book_id; public int getBook_id() { }

return book_id;

public void setBook_author(String book_author) { }

this.book_author = book_author; public String getBook_author() { }

return book_author;

public void setBook_publishTime(String book_publishTime) { this.book_publishTime = book_publishTime;

}

public String getBook_synopsis() { return book_synopsis;

}

public void setBook_synopsis(String book_synopsis) { this.book_synopsis = book_synopsis; }

}

3. 分页查询代码:

package com.book.pagin;

import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;

import mons.GetConnection; import com.book.entity.Book;

public class BookPaginQuery extends GetConnection { private final int PAGEROW = 8;//每页显示的行数

private int countRow;//总行数

private int countPage;//总页数

private int currentlyPage;//当前第几页 /**

* 得到总页数 * @return */

public int getCountPage() { return countPage;

}

/**

* 设置总页数

* @param countPage */

public void setCountPage() {

//通过总行数设置总页数

if (this.countRow % this.PAGEROW == 0) {//如果总行数除以每页显示的

行数余数为零时,总页数等于它们的商 this.countPage = this.countRow / this.PAGEROW;

} /**

* 得到总行数 * @return */

public int getCountRow() { } /**

* 设置总行数

* @param countRow */

public void setCountRow() {

//通过聚合函数查询 TBL_BOOK 表中一共有多少条数据,并把值存储到 countRow String sql = "SELECT COUNT(*) FROM TBL_BOOK"; try { }

PreparedStatement ps =

ResultSet rs = ps.executeQuery(); if (rs.next()) { }

// TODO Auto-generated catch block e.printStackTrace();

this.countRow = rs.getInt(1);

return countRow;

} else {//否则,总页数等于它们的商加1 this.countPage = this.countRow / this.PAGEROW + 1; }

}

super.getConn().prepareStatement(sql);

} catch (SQLException e) {

* 得到当前页数 * @return */

public int getCurrentlyPage() { } /**

* 设置当前页数

* @param currentlyPage */

public void setCurrentlyPage(int currentlyPage) { } /** * 分页查询

* @param page 当前页数 * @return */

public List<Book> myBookPaginQuery(int page){

List<Book> bookList = new ArrayList<Book>();

int num = (page-1) * this.PAGEROW; //要被排除的行数

String sql = "SELECT top("+this.PAGEROW+") * FROM TBL_BOOK WHERE try {

PreparedStatement ps =

this.currentlyPage = currentlyPage; return currentlyPage;

book_id NOT IN (SELECT TOP("+num+") book_id FROM TBL_BOOK)";

super.getConn().prepareStatement(sql);//预编译 SQL 指令并把预编译好的 SQL 存储在 PreparedStatement 对象中

ResultSet rs = ps.executeQuery(); //执行预编译好的 SQL 指令,并while (rs.next()) {//通过 while 循环迭代出结果集中的所有数据,并把

把获得的查询结果集存储在 ResultSet 对象中 它们存储在 List<Book> 集合中 Book book = new Book();

book.setBook_id(rs.getInt("book_id"));

book.setBook_name(rs.getString("book_name")); book.setBook_num(rs.getString("book_num")); book.setBook_author(rs.getString("book_author")); book.setBook_price(rs.getDouble("book_price")); book.setBook_synopsis(rs.getString("book_synopsis"));

book.setBook_publishTime(rs.getString("book_publishTime"));

}

}

}

}

} catch (SQLException e) {

// TODO Auto-generated catch block e.printStackTrace();

return bookList;

4. JSP 页面代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <jsp:directive.page import="com.book.pagin.BookPaginQuery"/> <jsp:directive.page import="com.book.entity.Book"/>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head>

<title>图书信息</title> <meta http-equiv="pragma" content="no-cache"> <body> <%

request.setCharacterEncoding("UTF-8"); //设置编码集

String strPageNum = request.getParameter("pageNum"); //获得当前<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>

页数的字符串

int pageNum = 1;

//把当前页数的字符串转化为数字,如果转化失败,则设置当前页数为 1 ,即首页

try{ }

pageNum = Integer.parseInt(strPageNum); pageNum = 1; } catch (Exception e){

前页

BookPaginQuery bookPaginQuery = new BookPaginQuery();//实例化 bookPaginQuery.setCountRow(); //设置总行数

bookPaginQuery.setCountPage(); //设置总页数

int countPage = bookPaginQuery.getCountPage(); //获得总页数

//如果当前页数小于 0 或大于总页数,则把当前页重新设为 1 ,即首页 if (pageNum<=0 || pageNum>countPage){ }

bookPaginQuery.setCurrentlyPage(pageNum); //设置当前页

int currentlyPage = bookPaginQuery.getCurrentlyPage(); //获得当

List<Book> bookList = bookPaginQuery.myBookPaginQuery(pageNum);

pageNum = 1;

BookPaginQuery 类,得到 bookPaginQuery 对象

//分页查询 %> <% %>

<tr>

<td width="200"><%=book.getBook_name() %></td> <td width="100"><%=book.getBook_num() %></td> <td width="50"><%=book.getBook_author() %></td> <td width="50"><%=book.getBook_price() %></td> <td width="300"><%=book.getBook_synopsis() %></td> <td

for (int i=0; i<bookList.size(); i++) {

Book book = bookList.get(i);

<table border="1" align="center"> <tr>

<th align="center">图书名称</th> <th align="center">图书编号</th> <th align="center">作者</th> <th align="center">价格</th> <th align="center">图书简介</th> <th align="center">出版日期</th>

</tr>

if(bookList!=null && bookList.size()>0) {

width="100"><%=book.getBook_publishTime().substring(0,10) %></td>

</tr>

%> %>

共<%=countPage %>页&nbsp;&nbsp;&nbsp;&nbsp;

当前第<%=currentlyPage %>页&nbsp;&nbsp;&nbsp;&nbsp; 首页&nbsp;&nbsp;&nbsp;&nbsp; 上一页&nbsp;&nbsp;&nbsp;&nbsp; <tr>

<td colspan="6" align="center"> if(currentlyPage==1){

}

<%

<a href="index.jsp?pageNum=<%=currentlyPage+1 %>">下一页</a>&nbsp;&nbsp;&nbsp;&nbsp;

<a href="index.jsp?pageNum=<%=countPage %>">尾页</a>&nbsp;&nbsp;&nbsp;&nbsp; <% %>

共<%=countPage %>页&nbsp;&nbsp;&nbsp;&nbsp;

当前第<%=currentlyPage %>页&nbsp;&nbsp;&nbsp;&nbsp;

<a href="index.jsp?pageNum=1">首页</a>&nbsp;&nbsp;&nbsp;&nbsp; }else if(currentlyPage==countPage){

<a href="index.jsp?pageNum=<%=currentlyPage-1 %>">上一页</a>&nbsp;&nbsp;&nbsp;&nbsp;

下一页&nbsp;&nbsp;&nbsp;&nbsp;

尾页&nbsp;&nbsp;&nbsp;&nbsp; <% %>

共<%=countPage %>页&nbsp;&nbsp;&nbsp;&nbsp;

当前第<%=currentlyPage %>页&nbsp;&nbsp;&nbsp;&nbsp;

<a href="index.jsp?pageNum=1">首页</a>&nbsp;&nbsp;&nbsp;&nbsp; }else{

<a href="index.jsp?pageNum=<%=currentlyPage-1 %>">上一页</a>&nbsp;&nbsp;&nbsp;&nbsp;

<a href="index.jsp?pageNum=<%=currentlyPage+1 %>">下一页</a>&nbsp;&nbsp;&nbsp;&nbsp;

<a href="index.jsp?pageNum=<%=countPage %>">尾页</a>&nbsp;&nbsp;&nbsp;&nbsp; <% %>

</td> </tr> </table> }

%>

<h2 align="center">对不起,没有相应的信息……</h2> <% %> </body> </html>

} }else{

最后效果如下图: 点击首页:

点击下一页:

点击尾页:

查询表单中要像这样的有个下拉框(select)里面全部为查询条件如(根据学生名,根据学生id) 后面还有个(text) 可以输入关键字如(张三,李四); 那位大哥能帮下忙解决下,举个例子说明.

select * from table where name like '%张三%'

把下拉框的值设置为数据库中的字段名。比如: <select name="type">

<option value="name">学生名 </option> </select>

后台根据得到的下拉框值,SQL语句如下: SQL code:

SELECT * from table WHERE type LIKE '%textvalue%';

上面的就可以满足你的需求了

我一般是拼接字符串

SQL用like语法就可以实现。

2L可以

LZ,2L的就很好。在servlet或者action中得到下拉列表(type)和文本框的值 (value)。

js

if(学生名){ like('%学生名%') } else if(id){ like('%id%') }

<%@ page contentType=&quot;text/html&#59;charset=8859_1&quot; %>; <% //变量声明

java.sql.Connection sqlCon&#59; //数据库连接对象 java.sql.Statement sqlStmt&#59; //SQL语句对象 java.sql.ResultSet sqlRst&#59; //结果集对象 ng.String strCon&#59; //数据库连接字符串 ng.String strSQL&#59; //SQL语句 int intPageSize&#59; //一页显示的记录数

int intRowCount&#59; //记录总数 int intPageCount&#59; //总页数 int intPage&#59; //待显示页码 ng.String strPage&#59; int i&#59;

//设置一页显示的记录数 intPageSize = 2&#59; //取得待显示页码

strPage = request.getParameter(&quot;page&quot;)&#59;

if(strPage==null){//表明在QueryString中没有page这一个参数,此时显示第一页数据 intPage = 1&#59; }

else{//将字符串转换成整型

intPage = ng.Integer.parseInt(strPage)&#59; if(intPage<1) intPage = 1&#59; }

//装载JDBC驱动程序

java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver())&#59; //设置数据库连接字符串

strCon = &quot;jdbc:oracle:thin:@linux:1521:ora4cweb&quot;&#59; //连接数据库

sqlCon = java.sql.DriverManager.getConnection(strCon,&quot;hzq&quot;,&quot;hzq&quot;)&#59; //创建一个可以滚动的只读的SQL语句对象

sqlStmt = sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY)&#59; //准备SQL语句

strSQL = &quot;select name,age from test&quot;&#59; //执行SQL语句并获取结果集

sqlRst = sqlStmt.executeQuery(strSQL)&#59; //获取记录总数 st()&#59;

intRowCount = sqlRst.getRow()&#59; //记算总页数

intPageCount = (intRowCount+intPageSize-1) / intPageSize&#59; //调整待显示的页码

if(intPage>;intPageCount) intPage = intPageCount&#59; %>; <html>; <head>;

<meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html&#59; charset=gb2312&quot;>; <title>;JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - Oracle</title>; </head>; <body>;

<table border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;>;

<tr>;

<th>;姓名</th>; <th>;年龄</th>; </tr>; <%

if(intPageCount>;0){

//将记录指针定位到待显示页的第一条记录上 sqlRst.absolute((intPage-1) * intPageSize + 1)&#59; //显示数据 i = 0&#59;

while(i<intPageSize &amp;&amp; !sqlRst.isAfterLast()){ %>; <tr>;

<td>;<%=sqlRst.getString(1)%>;</td>; <td>;<%=sqlRst.getString(2)%>;</td>; </tr>; <%

sqlRst.next()&#59; i++&#59; } } %>; </table>; 第页

<%=intPage%>;

<%=intPageCount%>;

<%if(intPage<intPageCount){%>;<a href=&quot;jdbc20-oracle.jsp?page=<%=intPage+1%>;&quot;>;

</a>;<%}%>; <%if(intPage>;1){%>;<a href=&quot;jdbc20-oracle.jsp?page=<%=intPage-1%>;&quot;>;上一页</a>;<%}%>; </body>; </html>; <%

//关闭结果集 sqlRst.close()&#59; //关闭SQL语句对象 sqlStmt.close()&#59; //关闭数据库 sqlCon.close()&#59; %>;

<%

int pageSize=10; //每页显示的条数 int pageNow=1; //默认显示第一页 int

allItem=Integer.parseInt(request.getSession().getAttribute("tiao").toString());//所有的条数

int pageCount=0; //页数 if(allItem%pageSize==0)

pageCount=allItem/pageSize; else

pageCount=allItem/pageSize+1; %> <%

ArrayList list= (ArrayList)session.getAttribute("listArrayList");

for(int i = (pageNow - 1) * pageSize ; i < ((pageNow * pageSize) > allItem ? allItem : (pageNow * pageSize)) ; i++) {

for(int j=0;j<list.size();j=j+8) {

String title=(String)list.get(j);

String author=(String)list.get(j+1); String keywords=(String)list.get(j+2); String kind=(String)list.get(j+3); String url=(String)list.get(j+4); String date=(String)list.get(j+5);

String describer=(String)list.get(j+6); String publisher=(String)list.get(j+7); %>

<table class=result id=k width="600" border="0" > <tbody> <tr>

<td> <div align="left">类型: <%=kind %> <a href="yulan.jsp"><%=title %></a> <br/>

关键字: <%=keywords %><br/> 资源描述: <%=describer %><br/>

作者: <%=author %> || 出版日期: <%=date %> || 出版社: <%=publisher %> || <a

href="${pageContext.request.contextPath}/download filename=<%=url %>">点击这里下载</a><br/>

地址: <%=url %> </div> </td></tr></tbody></table><br/> <%}} %>

<a href="show.jsp?page=1">首页</a>

<a href="show.jsp?page=<%=pageNow - 1 < 1 ? 1 : pageNow - 1%>">上一页</a>

<a href="show.jsp?page=<%=pageNow + 1 > pageCount ? pageCount : pageNow + 1%>">下一页</a>

<a href="show.jsp?page=<%=allItem %>">尾页</a> 当前第<%=pageNow %>页,总共<%=pageCount %>页 下面是我输出后的显示界面截图:

仔细看一下 第一条和第五条、第二条和第六条是一样的。是不是我的for循环写的有问题啊?我没有用数据库,用的是xml资源描述语言,搜索信息已经在servlet保存到session里了。

以下是servlet里的保存到session里的代码: for ( i = 0; i < hits.scoreDocs.length; i++) {

ScoreDoc sdoc = hits.scoreDocs[i];

Document doc = indexSearch.doc(sdoc.doc); t=doc.get("title"); a=doc.get("author");

k=doc.get("keywords");kd=doc.get("kind");

u=doc.get("url");dt=doc.get("date");db=doc.get("describe");

p=doc.get("publisher") list.add(t);list.add(a); list.add(k); list.add(kd); list.add(u); list.add(dt); list.add(db); list.add(p); } session.setAttribute("listArrayList",list); 各位高手看看 哪里错了啊?怎么循环显示啊? 还有显示界面的这句代码:

;<a href="${pageContext.request.contextPath}/download

filename=<%=url %>">点击这里下载</a>//点击文本可以实现下载,执行的代码我放到servlet里了servlet名叫download。

我没用EL语言啊能不能改一下啊?加上这句报错<%@ taglib uri="/jsp/jstl/core" prefix="c" %>/

ArrayList list= (ArrayList)session.getAttribute("listArrayList");

for(int i = (pageNow - 1) * pageSize ; i < ((pageNow * pageSize) > allItem ? allItem : (pageNow * pageSize)) ; i++) {

for(int j=0;j<list.size();j=j+8) {

String title=(String)list.get(j); String author=(String)list.get(j+1); String keywords=(String)list.get(j+2); String kind=(String)list.get(j+3); String url=(String)list.get(j+4); String date=(String)list.get(j+5); String describer=(String)list.get(j+6); String publisher=(String)list.get(j+7); %>

简单看了下你的程序,发现你第一个for循环应该是错了,改了再试试吧

for(int i = (pageNow - 1) * pageSize ; i < ((pageNow * pageSize) > allItem ? allItem : (pageNow * pageSize)) ; i++) 这里最后的i++应该改成i=i+pageSize;

因为看你的程序,你是想跟据页号不同来显示,可是第一页时i=0,第二页时i应该从10开始循环,可是你i++后,i就从1开始了循环 看看这样改对不对

PS:再说说你的程序为什么会出现第6项开始出现重复

你的list中应该有5组记录吧,也就是40项,因为你第一个for循环错误,所以当pageNow=1时,i < ((pageNow * pageSize) > allItem ? allItem :

(pageNow * pageSize))相当于i<5==true,所以执行第2个for循环,输出了前40项,即前5条记录;然后i++,i=1,又把前40项输出了一遍,直到输出5遍位置(tiao里存的应该是几组记录吧),不知道你的页面显示是重复了几遍,如果是5遍的话,应该是这种情况

查询示例

org.hibernate.criterion.Example

类允许你通过一个给定实例构建一个条件查询。 此实例的属性值将做成查询条件。 Java代码

Cat cat = new Cat(); cat.setSex('F');

cat.setColor(Color.BLACK);

List results = session.createCriteria(Cat.class) .add( Example.create(cat)) .list();

Example.create(cat) 表示根据cat这个对象来构造一个查询条件。

上面这条语句将查询sex 为 F 而且Color为BLACK的所有Cat记录。 版本属性、标识符和关联被忽略。默认情况下值为null的属性将被排除。 可以自行调整Example使之更实用。 Java代码

Example example = Example.create(cat) .excludeZeroes() //排除值为0的属性 .excludeProperty("color") //排除 color属性

.ignoreCase() //忽略大小写 .enableLike(); //启用模糊查询

List results = session.createCriteria(Cat.class) .add(example) .list();

甚至可以使用examples在关联对象上放置条件。 Java代码

List results = session.createCriteria(Cat.class) .add( Example.create(cat) ) .createCriteria("mate")

.add( Example.create( cat.getMate() ) ) .list();

本文来源:https://www.bwwdw.com/article/7pk1.html

Top