一个简单的mysql分页查询

数据库使用的mysql
使用分批查询,分批显示的方法
mysql排序是从0开始,页面显示10条,则:

第一页显示第0条到第9条
第二页显示第10条到第19条
第三页显示第20条到第29条
第二页显示第30条到第39条
第N页显示第(N-1)乘10条到第N乘10-1条

mysql查询代码:SELECT * FROM XXX LIMIT (从这个序号开始查询),(查询序号后的N条数据);
例:SELECT * FROM user LIMIT 0,10;
查询第一页的数据,从第1条开始查询,查询10条数据

关键代码:
javabean

public class User {
	private Integer id;
	private String name;
	private String question;
	private String answer;
	private Boolean isanswer;

	public User() {
	}
	......
	//省略相应的getter和setter方法
	}

Jdbc

package com.util;

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

public class JdbcUtil {
	// 加载DB驱动
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	private static Connection conn;

	// 获取Connection对象
	public static Connection getConnection() throws SQLException {
		String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT";
		String user = "root";
		String password = "123456";
		if (conn == null || conn.isClosed()) {
			conn = DriverManager.getConnection(url, user, password);
		}
		return conn;
	}

	// 关闭资源对象
	public static void close(Connection conn, Statement stmt, ResultSet rs) throws SQLException {
		if (conn != null && !conn.isClosed()) {
			conn.close();
		}
		if (stmt != null && !stmt.isClosed()) {
			stmt.close();
		}
		if (rs != null && !rs.isClosed()) {
			rs.close();
		}
	}
}

配置web.xml

	<servlet>
		<servlet-name>UserSelectServlet</servlet-name>
		<servlet-class>com.servlet.UserSelectServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>UserSelectServlet</servlet-name>
		<url-pattern>/userSelectServlet</url-pattern>
	</servlet-mapping>
</web-app>

servlet代码,获取到jsp传的页码,调用方法在数据库查询,将查询到的结果返回到list,将list的值放进域,跳转到jsp页面显示

package com.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.bean.User;
import com.service.IUserSelectService;
import com.service.UserSelectServiceImpl;

public class UserSelectServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 获取页码
		String num = request.getParameter("num");
		
	
		// 创建Service对象
		IUserSelectService service = new UserSelectServiceImpl();

		// 调用service对象上的方法
		List<User> list = service.userSelcet(num);

		// 将结果添加到域中
		request.setAttribute("user", list);

		// 跳转页面
		request.getRequestDispatcher("/fenye.jsp").forward(request, response);

	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

dao层代码:将数据库查询结果返回

package com.dao;

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

import com.bean.User;
import com.util.JdbcUtil;

public class UserSelectDaoImpl implements IUserSelectDao {

	private Connection conn;
	private Statement stmt;
	private PreparedStatement ps;
	private ResultSet rs;

	@Override
	public List<User> userSelect(String num) {
		
		//将页码参数的类型转换成Integer
		Integer Num = Integer.parseInt(num);
		System.out.println(Num);
		//将页码参数*每页显示的数目
		Num = Num * 2;

		List<User> list = new ArrayList<>();

		try {
			conn = JdbcUtil.getConnection();
			//查询从页码*每页显示的数目之后的2条数据
			String sql = "SELECT * FROM message LIMIT ?,2";
			ps = conn.prepareStatement(sql);
			ps.setInt(1, Num);
			rs = ps.executeQuery();
			//将查询到的数据装入list
			while (rs.next()) {
				User user = new User();
				user.setName(rs.getString("name"));
				user.setQuestion(rs.getString("question"));
				list.add(user);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				JdbcUtil.close(conn, stmt, rs);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		//返回list
		return list;
	}
}

页面显示:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<title>首页</title>
</head>
<body>
	<table border: 1px>
		<tr>
			<th>姓名</th>
			<th>问题</th>
		</tr>
		<tr>
		//遍历结果并打印
			<c:forEach items="${user }" var="user">
				<td>${user.name }</td>
				<td>${user.question }</td>
			</c:forEach>
		</tr>
	</table>
	//分页导航栏,跳转servlet并传参数(页码的值-1)
	<ul>
		<li><a href="/fenyeSelect/userSelectServlet?num=0">1</a></li>
		<li><a href="/fenyeSelect/userSelectServlet?num=1">2</a></li>
		<li><a href="/fenyeSelect/userSelectServlet?num=2">3</a></li>
	</ul>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL查询是指在查询结果集中,根据指定的起始位置和每页显示的记录数,返回对应的记录。常见的MySQL分页查询方法有两种:使用LIMIT关键字和使用子查询。 第一种方法是使用LIMIT关键字,其语法为:SELECT * FROM table LIMIT m, n。其中m表示起始位置,n表示每页显示的记录数。引用中提到,该查询方法能够实现分页,但m越大,查询性能就越低,因为MySQL需要扫描全部m+n条记录。 第二种方法是使用子查询,其语法为:SELECT * FROM (SELECT * FROM table LIMIT m, n) AS t。这种方法相比第一种方法,性能更强,尤其是当m的值较大时。引用指出,由于内部的子查询只扫描了id字段,而非全表,所以性能要强于第一种方法,并且能够解决跨页查询问题。 综上所述,MySQL分页查询可以通过使用LIMIT关键字或者子查询来实现。具体选择哪种方法取决于查询的需求和性能要求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [MySQL分页查询的5种方法](https://blog.csdn.net/m0_67391401/article/details/126062208)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [mysql 数据库分页查询详细讲解](https://blog.csdn.net/m0_37449634/article/details/128903042)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值