好的。要详细讲解“jsp+mysql实现网页的分页查询”的完整攻略,需要了解以下几个步骤。
第一步:建立数据库
首先,在mysql中建立我们需要的数据库,并创建一个表来存储数据。例如,创建一个学生表students
,表中包括学号、姓名、性别、年龄等字段。
表的创建语句如下:
CREATE TABLE `students` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`sex` varchar(2) NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
第二步:编写jsp页面
接着,需要编写一个jsp页面来实现网页的分页查询。同时,还需要引入mysql的jdbc驱动包。
下面是一个简单的示例,实现了从students
表中分页查询学生信息。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>分页查询</title>
</head>
<body>
<%
// 引入mysql的jdbc驱动包
Class.forName("com.mysql.jdbc.Driver");
// 连接数据库
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, user, password);
// 获取请求参数
int page = Integer.parseInt(request.getParameter("page"));
int pageSize = Integer.parseInt(request.getParameter("pageSize"));
// 查询数据
String sql = "SELECT * FROM students LIMIT ?, ?";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setInt(1, (page - 1) * pageSize);
pst.setInt(2, pageSize);
ResultSet rs = pst.executeQuery();
// 遍历查询结果并输出
while (rs.next()) {
out.println("学号:" + rs.getInt("id") + ",姓名:" + rs.getString("name") + ",性别:" + rs.getString("sex") + ",年龄:" + rs.getInt("age") + "<br/>");
}
rs.close();
pst.close();
conn.close();
%>
<hr/>
<%
// 计算总页数
int totalCount = 50;
int totalPage = (totalCount % pageSize == 0) ? (totalCount / pageSize) : (totalCount / pageSize + 1);
%>
<%
// 输出分页信息
for (int i = 1; i <= totalPage; i++) {
if (page == i) {
out.println(i);
} else {
out.println("<a href='?page=" + i + "&pageSize=" + pageSize +"'>" + i + "</a>");
}
out.print(" ");
}
%>
</body>
</html>
上述代码中,我们首先引入mysql的jdbc驱动包,并使用DriverManager
类连接我们建立的test
数据库。然后获取请求参数page
和pageSize
,并使用PreparedStatement
类执行带有分页参数的查询语句,将查询到的结果循环输出到网页上。最后根据总记录数和每页显示的记录数,计算出总页数,将页码信息输出到网页上。
第三步:启动tomcat
最后,将编写好的jsp页面复制到tomcat服务器的webapps目录下,并启动tomcat服务器。在浏览器中输入http://localhost:8080/分页查询/index.jsp,即可查看分页查询效果。
另外,我们再给出一个示例来更好地理解这个过程。在这个示例中,我们将以上的jsp页面改为使用servlet实现分页查询。
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/StudentServlet")
public class StudentServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 引入mysql的jdbc驱动包
try {
Class.forName("com.mysql.jdbc.Driver");
// 连接数据库
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, user, password);
// 获取请求参数
int page = Integer.parseInt(request.getParameter("page"));
int pageSize = Integer.parseInt(request.getParameter("pageSize"));
// 查询数据
String sql = "SELECT * FROM students LIMIT ?, ?";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setInt(1, (page - 1) * pageSize);
pst.setInt(2, pageSize);
ResultSet rs = pst.executeQuery();
// 将查询结果放入request中,转发到jsp页面进行展示
request.setAttribute("students", rs);
request.getRequestDispatcher("/index.jsp").forward(request, response);
rs.close();
pst.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
在这个示例中,我们修改了代码结构,将所有的查询操作和输出操作放到了doGet方法中,并在查询结果之后将结果放入了request的属性中,使用request对象实现了请求转发。由于servlet不直接输出html页面,因此我们还需要添加一个index.jsp页面用于展示查询结果。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>分页查询</title>
</head>
<body>
<%
// 输出查询结果
ResultSet rs = (ResultSet) request.getAttribute("students");
while (rs.next()) {
out.println("学号:" + rs.getInt("id") + ",姓名:" + rs.getString("name") + ",性别:" + rs.getString("sex") + ",年龄:" + rs.getInt("age") + "<br/>");
}
rs.close();
%>
<hr/>
<%
// 计算总页数
int totalCount = 50;
int totalPage = (totalCount % pageSize == 0) ? (totalCount / pageSize) : (totalCount / pageSize + 1);
%>
<%
// 输出分页信息
for (int i = 1; i <= totalPage; i++) {
if (page == i) {
out.println(i);
} else {
out.println("<a href='?page=" + i + "&pageSize=" + pageSize +"'>" + i + "</a>");
}
out.print(" ");
}
%>
</body>
</html>
在这个jsp页面中,我们从request对象中获取查询结果,并将查询结果输出到网页上。由于查询结果被放在结果集中,因此需要使用rs.next()
方法进行遍历。与之前的示例相同,我们计算了总页数,并在页面中输出了分页信息。
通过以上的两个示例,我们可以更好地理解分页查询的实现过程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsp+mysql实现网页的分页查询 - Python技术站