分析:要想从数据库中查询数据并分页展示到表格中,我觉得应该按照这个思路:首先就是发起请求,此时需要向数据库中传递三个参数:当前页码(pageNum)、每一页的数量(pageSize)、搜索的关键词(searchKey)、控制从第几页开始(startPageNum)
然后就是接受返回的结果:数据(data)、 总数据条数(totalCount)
// 分页:定义两个变量
private int pageNum = 1; // 当前是第几页
private int pageSize = 10; // 一页显示多少条数据
package com.resquest;
import lombok.Data;
/**
* @Author:xiexu
* @Date:2023/12/12 12:59
*/
@Data
public class StudentRequest {
private int pageNum;
private int pageSize;
private String searchKey; // 搜索关键字
private int startPageNum; // 控制从第几页开始
public int getStartPageNum() {
return (pageNum - 1) * pageSize;
}
public void setStartPageNum(int startPageNum) {
this.startPageNum = startPageNum;
}
}
package com.response;
import lombok.Data;
import java.util.Vector;
/**
* @Author:xiexu
* @Date:2023/12/12 13:07
*/
@Data
public class TableDTO {
private Vector> data;
private int totalCount;
}
返回的结果是TableDTO类型
public interface StudentService {
TableDTO queryStudent(StudentRequest studentRequest);
}
package com.service.Impl;
import com.response.TableDTO;
import com.resquest.StudentRequest;
import com.service.StudentService;
import com.utils.DBUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
/**
* @Author:xiexu
* @Date:2023/12/11 10:40
*/
public class StudentServiceImpl implements StudentService {
@Override
public TableDTO queryStudent(StudentRequest studentRequest){
StringBuilder sql = new StringBuilder();
sql.append("select * from detail ");
if (studentRequest.getSearchKey() != null && !"".equals(studentRequest.getSearchKey().trim())) {
sql.append(" where name like '%"+ studentRequest.getSearchKey() + "%'");
}
sql.append("order by id desc limit ").append(studentRequest.getStartPageNum())
.append(",").append(studentRequest.getPageSize());
// 执行
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
TableDTO tableDTO = new TableDTO(); // 返回的数据
try {
connection = DBUtil.getConnection();
preparedStatement = connection.prepareStatement(sql.toString());
resultSet = preparedStatement.executeQuery(); // 执行查询返回结果集
// 查询记录
Vector> queryDatas = fillTableData(resultSet);
tableDTO.setData(queryDatas);
sql.setLength(0);
sql.append("select count(*) from detail ");
if (studentRequest.getSearchKey() != null && !"".equals(studentRequest.getSearchKey().trim())) {
sql.append(" where name like '%"+ studentRequest.getSearchKey() + "%'");
}
preparedStatement = connection.prepareStatement(sql.toString());
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
int count = resultSet.getInt(1);
tableDTO.setTotalCount(count);
}
return tableDTO;
}catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.closeRS(resultSet);
DBUtil.closePS(preparedStatement);
DBUtil.closeConnection(connection);
}
return null;
}
private static Vector> fillTableData(ResultSet resultSet) throws SQLException {
Vector> data = new Vector<>();
while (resultSet.next()) {
// 遍历查询的每一条记录
Vector
上述代码详细解释:
1. 下方代码主要是编写sql语句的, 使用StringBuilder()动态构建字符串。 首先判断searchKey是否为空或是否为空字符串,false的话,就直接下方的sql语句,如果为true的话,需要按照name进行模糊查询,然后再拼接下方的sql语句
StringBuilder sql = new StringBuilder();
sql.append("select * from detail ");
if (studentRequest.getSearchKey() != null && !"".equals(studentRequest.getSearchKey().trim())) {
sql.append(" where name like '%"+ studentRequest.getSearchKey() + "%'");
}
sql.append("order by id desc limit ").append(studentRequest.getStartPageNum())
.append(",").append(studentRequest.getPageSize());
2. 查询数据,并注入到tableDTO中
// 查询记录
Vector> queryDatas = fillTableData(resultSet);
tableDTO.setData(queryDatas);
fillTableData函数:
private static Vector> fillTableData(ResultSet resultSet) throws SQLException {
Vector> data = new Vector<>();
while (resultSet.next()) {
// 遍历查询的每一条记录
Vector
3. 查询数据数量
sql.setLength(0); // 首先将之前的sql语句置为空
sql.append("select count(*) from detail ");
if (studentRequest.getSearchKey() != null && !"".equals(studentRequest.getSearchKey().trim())) {
sql.append(" where name like '%"+ studentRequest.getSearchKey() + "%'");
}
preparedStatement = connection.prepareStatement(sql.toString());
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
int count = resultSet.getInt(1);
tableDTO.setTotalCount(count);
}
4. MainView中使用
StudentServiceImpl studentService = new StudentServiceImpl();
StudentRequest studentRequest = new StudentRequest();
studentRequest.setPageNum(pageNum);
studentRequest.setPageSize(pageSize);
studentRequest.setSearchKey(searchTxt.getText().trim());
TableDTO tableDTO = studentService.queryStudent(studentRequest);
Vector> data = tableDTO.getData();
int totalCount = tableDTO.getTotalCount();
5.运行结果
本篇博客中涉及的数据库连接的相关代码请参考:http://t.csdnimg.cn/eYNmw