Java+Swing: 从数据库中查询数据并显示在表格中 整理11

分析:要想从数据库中查询数据并分页展示到表格中,我觉得应该按照这个思路:首先就是发起请求,此时需要向数据库中传递三个参数:当前页码(pageNum)每一页的数量(pageSize)搜索的关键词(searchKey)控制从第几页开始(startPageNum)

然后就是接受返回的结果数据(data)总数据条数(totalCount)

 

1. 首先在MainView中定义两个变量,给出初始值

    // 分页:定义两个变量private int pageNum = 1;  // 当前是第几页private int pageSize = 10; // 一页显示多少条数据

2. 创建请求的类对象

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;}
}

3. 创建接受返回结果的类对象

package com.response;import lombok.Data;import java.util.Vector;/*** @Author:xiexu* @Date:2023/12/12 13:07*/
@Data
public class TableDTO {private Vector<Vector<Object>> data;private int totalCount;
}

4. 定义接口

返回的结果是TableDTO类型

public interface StudentService {TableDTO queryStudent(StudentRequest studentRequest);
}

5. 实现接口 

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 {@Overridepublic 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<Vector<Object>> 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<Vector<Object>> fillTableData(ResultSet resultSet) throws SQLException {Vector<Vector<Object>> data = new Vector<>();while (resultSet.next()) {// 遍历查询的每一条记录Vector<Object> oneRecord = new Vector<>();int id = resultSet.getInt("id");String name = resultSet.getString("name");String no = resultSet.getString("no");String homeTown = resultSet.getString("homeTown");int chinese = resultSet.getInt("chinese");int math = resultSet.getInt("math");int english = resultSet.getInt("english");int total = resultSet.getInt("total");oneRecord.addElement(id);oneRecord.addElement(name);oneRecord.addElement(no);oneRecord.addElement(homeTown);oneRecord.addElement(chinese);oneRecord.addElement(math);oneRecord.addElement(english);oneRecord.addElement(total);data.addElement(oneRecord);}return data;}
}

上述代码详细解释: 

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<Vector<Object>> queryDatas = fillTableData(resultSet);tableDTO.setData(queryDatas);

fillTableData函数:

private static Vector<Vector<Object>> fillTableData(ResultSet resultSet) throws SQLException {Vector<Vector<Object>> data = new Vector<>();while (resultSet.next()) {// 遍历查询的每一条记录Vector<Object> oneRecord = new Vector<>();int id = resultSet.getInt("id");String name = resultSet.getString("name");String no = resultSet.getString("no");String homeTown = resultSet.getString("homeTown");int chinese = resultSet.getInt("chinese");int math = resultSet.getInt("math");int english = resultSet.getInt("english");int total = resultSet.getInt("total");oneRecord.addElement(id);oneRecord.addElement(name);oneRecord.addElement(no);oneRecord.addElement(homeTown);oneRecord.addElement(chinese);oneRecord.addElement(math);oneRecord.addElement(english);oneRecord.addElement(total);data.addElement(oneRecord);}return data;}

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<Vector<Object>> data = tableDTO.getData();int totalCount = tableDTO.getTotalCount();

 5.运行结果

本篇博客中涉及的数据库连接的相关代码请参考:http://t.csdnimg.cn/eYNmw

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/268161.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5 - ArchvizExplorer与Map Border Collection结合 - 实现电子围栏效果

插件地址&#xff1a; https://www.unrealengine.com/marketplace/zh-CN/product/archviz-explorer https://www.unrealengine.com/marketplace/zh-CN/product/map-border-collection ArchvizExplorer扩展&#xff1a; https://download.csdn.net/download/qq_17523181/8843305…

@CrossOrigin解决跨域不生效问题

参考文献 CrossOrigin注解没有生效&#xff0c;解决方案集合_crossorigin注解不起作用-CSDN博客

selenium自动化(中)

显式等待与隐式等待 简介 在实际工作中等待机制可以保证代码的稳定性&#xff0c;保证代码不会受网速、电脑性能等条件的约束。 等待就是当运行代码时&#xff0c;如果页面的渲染速度跟不上代码的运行速度&#xff0c;就需要人为的去限制代码执行的速度。 在做 Web 自动化时…

Cloudflare WARP无限流量MacOS

一、下载Cloudflare WARP 官网地址:https://1.1.1.1/, 下载macOS版本&#xff0c;解压后安装&#xff0c;并启动 启动后会在状态栏中显示出来。 二、升级为Warp 24PB版 1.打开网址&#xff1a;https://blog.upx8.com/warp.html&#xff0c;点击生成密钥&#xff1b; 2.将…

【LeetCode】每日一题 2023_12_9 下一个更大的数值平衡数(枚举/打表二分)

文章目录 刷题前唠嗑题目&#xff1a;下一个更大的数值平衡数题目描述代码与解题思路官方解法 结语 刷题前唠嗑 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 题目&#xff1a;下一个更大的数值平衡数 题目链接&#xff1a;2048. 下一个更大的数值平衡数 …

书-二分查找找某个数字p155

#include<stdio.h> int main(){int a[10]{1,4,5,6,7,8,23,34,90,14567};int mid;int low0;int high9;while(low<high){mid(lowhigh)/2;//数组分成两段&#xff0c;前一段low-mid&#xff0c;后一段mid-highif (a[mid]<23)//因为已经是排序好的了&#xff0c;所以如…

电脑连接了wifi但是没有网络

电脑连接了WiFi但是网络不可用 问题场景&#xff1a;问题描述解决方案&#xff1a; 问题场景&#xff1a; 搬砖搬的好好的&#xff0c;电脑的WiFi突然就断开了&#xff0c;这时候还没意识到问题的严重性&#xff0c;直接就去重新连WiFi&#xff0c;能连上&#xff0c;但是没有…

智能优化算法应用:基于猫群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于猫群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于猫群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.猫群算法4.实验参数设定5.算法结果6.参考文献7.MA…

解密:为何YouTube 5秒广告‘秒’过,国内视频平台坚持15秒?

大家好&#xff0c;我是小米&#xff01;今天我们来聊一个热门的话题&#xff1a;为什么YouTube可以在5秒后跳过广告&#xff0c;而国内视频平台却坚持15秒呢&#xff1f;这可不是简单的数字差异&#xff0c;而是一个关乎用户体验、商业模式以及产品策略的大问题。作为一个热衷…

【Python必做100题】之第十一题(组合数字)

题目&#xff1a;有四个数字&#xff1a;1,2,3,4&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;各是多少&#xff1f; 思路&#xff1a;可利用循环组合数字 代码如下&#xff1a; # 有四个数字&#xff1a;1,2,3,4&#xff0c;能组成多少个互不相同且无…

从视频中提取图片,轻松制作专属视频封面

你是否曾经为如何制作一个吸引人的视频封面而烦恼&#xff1f;现在&#xff0c;我们将向你展示如何从视频中提取图片&#xff0c;并轻松制作专属的视频封面。无论你是视频编辑新手&#xff0c;还是经验丰富的专业人士&#xff0c;这个技巧都能够帮助你快速提升你的视频品质。 …

【大模型】800万纯AI战士年末大集结,硬核干货与音乐美食12月28日准时开炫

文章目录 WAVE SUMMIT五载十届&#xff0c;AI开发者热血正当时酷炫前沿、星河共聚&#xff01;大模型技术生态发展正当时 回望2023年&#xff0c;大语言模型或许将是科技史上最浓墨重彩的一笔。从技术、产业到生态&#xff0c;大语言模型在突飞猛进中加速重构万物。随着理解、生…