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.mzph.cn/news/216092.shtml

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

相关文章

Knowledge Graph知识图谱—8. Web Ontology Language (OWL)

8. Web Ontology Language (OWL) 在RDFs不可能实现&#xff1a; Property cardinalities, Functional properties, Class disjointness, we cannot produce contradictions, circumvent the Non Unique Naming Assumption, circumvent the Open World Assumption 8.1 OWL Tr…

网工排查网络故障,有这两款软件就够了

网络工程师的工作中&#xff0c;排查网络故障占很大一部分。领导让你查网络故障&#xff0c;批量Ping几十台电脑&#xff0c;结果你Ping了一个小时还没好。你总不能说批量Ping就是这么慢吧&#xff1f; 所以&#xff0c;在这里介绍两款网络工程师常用的排查网络故障工具。 Qu…

知名火锅连锁企业,IT 团队如何在数千家门店中先于用户发现故障

该知名火锅连锁企业是中国领先的餐饮企业&#xff0c;上千家门店遍布全球&#xff0c;由于门店餐饮行业的特殊性&#xff0c;需要靠前部署服务&#xff0c;所以在每家餐厅中&#xff0c;会部署相应的服务器&#xff0c;及相应 IT 设备&#xff0c;本地会运行POS、会员、下单等业…

[NCTF2019]Fake XML cookbook1

提示 xml注入 一般遇到像登录页之类的就因该想到sql注入、弱口令或者xml等 随便输入抓包 这里明显就是xml注入 这里我们来简单了解一下xml注入 这里是普通的xml注入 xml注入其实和sql注入类似&#xff0c;利用了xml的解析机制如果系统没有将‘<’‘>’进行转义&#xff0…

u盘格式化和快速格式化的区别是什么?为您揭晓答案

在日常使用中&#xff0c;我们经常遇到U盘无法正常读取或存储数据的情况。这时候&#xff0c;格式化U盘成为一种常见的解决方法。然而&#xff0c;在格式化U盘时&#xff0c;我们面临两种选择&#xff1a;普通格式化和快速格式化。这两种格式化方式有什么区别&#xff1f;我们又…

Git 硬重置之后恢复历史提交版本

****硬重置之前一定要备份分支呀&#xff0c;谨慎使用硬重置&#xff0c;特别是很多人一起使用的分支**** 如果你在reset的时候选择了Hard选项&#xff0c;也就是硬重置 重置完且push过&#xff0c;那么被你本地和远端后面的提交记录肯定就会被抹去。 解决办法&#xff1a; …

【MAC】iStatistica Pro — 硬件性能状态监控工具

1、iStatistica Pro简介 iStatistica Pro (含iStatistica Sensors mac温度监控模块) 是一款非常漂亮的菜单栏mac系统监控工具。 他的功能包含&#xff1a;Mac 系统摘要&#xff0c;Mac电池信息&#xff0c;Mac网络监控&#xff0c;Mac温度传感器监控&#xff0c;Mac磁盘管理&a…

C/C++ 两数之和为目标值时返回下标

题目&#xff1a;给定一个整数数组nums和一个整数目标值target&#xff0c;在该数组中找出和为目标值target的那两个整数&#xff0c;并返回它们的数组下标。 前提假设&#xff1a;每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。可以按任意…

物联网僵尸网络和 DDoS 攻击的 CERT 分析

在攻击发生当天早上&#xff0c;Dyn 证实其位于东海岸的 DNS 基础设施遭受了来自世界各地的 DDoS 攻击。这些攻击严重影响了 Dyn 的 DNS 客户的业务&#xff0c;更糟糕的是&#xff0c;客户的网站变得无法访问。这些攻击一直持续到美国东部时间下午13&#xff1a;45。Dyn在其官…

C语言学习----指针和数组

&#x1f308;这篇blog记录一下指针学习~ 主要是关于指针和数组之间的关系&#xff0c;还有指针的使用等~ &#x1f34e;指针变量是一个变量 其本身也有一个地址 也需要存放&#xff0c;就和int char等类型一样的&#xff0c;也需要有一个地址来存放它 &#x1f34c;而指针变量…

手机显示此应用专为旧版android打造,因此可能无法运行,点击应用后闪退的问题解决方案

如果您在尝试安装并运行一个Android应用&#xff08;APK文件&#xff09;时遇到错误消息“此应用专为旧版Android打造, 因此可能无法运行”&#xff0c;或者应用在启动时立即崩溃&#xff0c;以下是一些您可以尝试的解决步骤&#xff1a; 图片来源&#xff1a;手机显示此应用专…

抖音小店开设条件和区别:个人店 vs 企业店解析

抖音小店是抖音平台为商家提供的一种电商服务&#xff0c;可以帮助商家建立线上店铺&#xff0c;通过短视频和直播等形式进行商品展示和销售。在抖音小店中&#xff0c;商家可以选择开设个人店或企业店。下面不若与众将介绍抖音小店个人店和企业店的开设条件和区别。 1. 个人店…

资深测试总结,性能测试目的如何做?主要看什么指标?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、性能测试是什么…

Jenkins 添加node节点

安装SSH插件 Jenkins- 插件管理- 可选插件- 搜索SSH Agent 配置启用SSH Server Jenkins- 系统管理 - 全局安全配置&#xff0c; 把 SSH Server 设置为启用(默认是禁用) 新增节点 第一种方式&#xff08;SSH密钥连接&#xff09;&#xff1a; 1.Jenkins主机生成SSH密钥 [rootk…

Python简单网抑云数据采集 JS逆向

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.10 Pycharm 模块使用: requests -> pip install requests execjs -> pip install execjs 爬虫实现基本思路流程: 一. 数据来源分析: 明确需求: 明确采集的网站以及数据内容 网址: https://mu…

【Spark精讲】Spark任务运行流程

Spark任务执行流程 部署模式是根据Drvier和Executor的运行位置的不同划分的。client模式提交任务与Driver进程在同一个节点上&#xff0c;而cluster模式提交任务与Driver进程不在同一个节点。 Client模式 Clinet模式是在spark-submit提交任务的节点上运行Driver进程。 执行流…

《码农的噩梦与修电脑的奇幻之旅》

故事从一个充满梦想的码农学习计算机编程开始。他对编写程序充满了热情&#xff0c;认为自己就像是一位能够编织魔法的巫师&#xff0c;能够创造出炫酷的虚拟世界。 然而&#xff0c;这个充满幻想的故事在码农入门的第一天就遭遇了突如其来的挫折。电脑故障了&#xff01;所有…

全网最新最全的基于Tensorflow和PyTorch深度学习环境安装教程: Tensorflow 2.10.1 加 CUDA 11.8 加 CUDNN8.8.1加PyTorch2.0.0

本文编写日期是&#xff1a;2023年4月. Python开发环境是Anaconda 3.10版本&#xff0c;具体Anaconda的安装这里就不赘述了&#xff0c;基础来的。建议先完整看完本文再试&#xff0c;特别是最后安装过程经验分享&#xff0c;可以抑制安装过程中一些奇怪的念头&#xff0c;减少…

气动工具市场分析:预计2029年将达到725亿元

从广义上讲&#xff0c;气动工具主要是利用压缩空气带动气动马达而对外输出动能工作的一种工具&#xff0c;根据其基本工作方式可分为&#xff1a;1)旋转式(偏心可动叶片式)&#xff1b;2)往复式(容积活塞式)一般气动工具主要由动力输出部分、作业形式转化部分、进排气路部分、…

排序与算法--冒泡排序

1.原理 比较两个相邻的元素&#xff0c;将较大的值交换到右边 2.举例&#xff1a;2 8 7 5 9 4 3 第一趟&#xff1a; 第一次&#xff1a;比较第一个和第二个&#xff1a;2 8 &#xff0c;不需要交换 第二次&#xff1a;比较 8 7&#xff0c;将8和7进行交换&#xff1a;2 7 …