【技能实训】DMS数据挖掘项目-Day14

news2024/11/26 10:45:45

文章目录

  • 任务16
    • 【任务16.1】数据的请求和响应
    • 【任务16.2】创建JTable的数据适配器类MatchedTableModel,直接从数据库获取数据。

任务16

【任务16.1】数据的请求和响应

数据的请求和响应方法
1
程序设计

package com.qst.dms.service;


import com.qst.dms.net.Request;
import com.qst.dms.net.Response;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import java.net.Socket;

public class DmsNetService {
    private  static  DmsNetService instance = new DmsNetService();
    private  DmsNetService(){
    }

    public static DmsNetService getInstance(){
        return  instance;
    }

    public static void  sendRequest(Socket socket, Request request) throws IOException{
        ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
        out.writeObject(request);
        out.flush();
    }

    public static Request receiveRequest(Socket socket) throws ClassNotFoundException, IOException{
        ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
        Request req = (Request)in.readObject();
        return req;
    }

    public static void sendResponse(Socket socket, Response response) throws IOException{
        ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
        out.writeObject(response);
        out.flush();
    }

    public static Response receiveResponse(Socket socket) throws IOException,ClassNotFoundException{
        ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
        Response res = (Response)in.readObject();
        return res;
    }

}

请求封装类
2
程序设计

package com.qst.dms.net;

import com.qst.dms.entity.MatchedDataBase;

import java.io.Serializable;
import java.util.List;

public class Request implements Serializable {
    private static final long serialVersionUID = 1L;
    public static final int DATA_TYPE_LOGREC = 1;
    public static final int DATA_TYPE_TRANSPORT = 2;
    private String time;
    private String ip;
    private int type;
    private List<MatchedDataBase> data;
    public Request(){
        super();
    }
    public Request(String  time, String ip, int type, List<MatchedDataBase> data){
        super();
        this.time=time;
        this.ip=ip;
        this.type=type;
        this.data=data;
    }


    /**
     * 获取
     * @return time
     */
    public String getTime() {
        return time;
    }

    /**
     * 设置
     * @param time
     */
    public void setTime(String time) {
        this.time = time;
    }

    /**
     * 获取
     * @return ip
     */
    public String getIp() {
        return ip;
    }

    /**
     * 设置
     * @param ip
     */
    public void setIp(String ip) {
        this.ip = ip;
    }

    /**
     * 获取
     * @return type
     */
    public int getType() {
        return type;
    }

    /**
     * 设置
     * @param type
     */
    public void setType(int type) {
        this.type = type;
    }

    /**
     * 获取
     * @return data
     */
    public List<MatchedDataBase> getData() {
        return data;
    }

    /**
     * 设置
     * @param data
     */
    public void setData(List<MatchedDataBase> data) {
        this.data = data;
    }

    public String toString() {
        return "Request{time = " + time + ", ip = " + ip + ", type = " + type + ", data = " + data + "}";
    }
}

响应封装类
3
程序设计

package com.qst.dms.net;

import java.io.Serializable;

public class Response implements Serializable {

    private static final long serialVersionUID = 1L;
    public static final int OK =200;
    public static final int ERROR = 500;
    private String time;
    private int state;

    public Response(){
        super();
    }

    public Response(String time, int state) {
        super();
        this.time = time;
        this.state = state;
    }

    /**
     * 获取
     * @return time
     */
    public String getTime() {
        return time;
    }

    /**
     * 设置
     * @param time
     */
    public void setTime(String time) {
        this.time = time;
    }

    /**
     * 获取
     * @return state
     */
    public int getState() {
        return state;
    }

    /**
     * 设置
     * @param state
     */
    public void setState(int state) {
        this.state = state;
    }

    public String toString() {
        return "Response{time = " + time + ", state = " + state + "}";
    }
}

【任务16.2】创建JTable的数据适配器类MatchedTableModel,直接从数据库获取数据。

在com.qst.dms.entity类下创MatchedTableModel,继承AbstractTableModel

// 使用ResultSet来创建TableModel
	private ResultSet rs;
	private ResultSetMetaData rsmd;
	// 标志位,区分日志和物流:1,日志;0,物流
	private int sign;

	public MatchedTableModel(ResultSet rs, int sign) {
		this.rs = rs;
		this.sign = sign;
		try {
			rsmd = rs.getMetaData();
		} catch (Exception e) {
			rsmd = null;
		}
	}

	// 获取表格的行数
	public int getRowCount() {
		try {
			rs.last();
			// System.out.println(count);
			return rs.getRow();
		} catch (Exception e) {
			return 0;
		}
	}

	// 获取表格的列数
	public int getColumnCount() {
		try {
			// System.out.println(rsmd.getColumnCount());
			return rsmd.getColumnCount();
		} catch (Exception e) {
			return 0;
		}
	}

	// 获取指定位置的值
	public Object getValueAt(int rowIndex, int columnIndex) {
		try {
			rs.absolute(rowIndex + 1);
			return rs.getObject(columnIndex + 1);
		} catch (Exception e) {
			return null;
		}
	}

	// 获取表头信息
	public String getColumnName(int column) {
		String[] logArray = { "日志ID", "采集时间", "采集地点", "状态", "用户名", "IP", "日志类型" };
		String[] tranArray = { "物流ID", "采集时间", "目的地", "状态", "经手人", "收货人",
				"物流类型" };
		return sign == 1 ? logArray[column] : tranArray[column];
	}


// 菜单项,注册监听
miShow.addActionListener(new ShowDataListener());

// 工具栏项 注册监听
btnShow.addActionListener(new ShowDataListener());

LogRecService类中增加方法readLogResult()

//获取数据库中的所有匹配的日志信息,返回一个ResultSet
	public ResultSet readLogResult() {	

          //获取匹配日志表中的所有数据,返回ResultSet	
         //创建语句时使用:
      //Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
	}

TransportService 类中增加方法readTransResult()

//获取数据库中的所有匹配的物流信息,返回一个ResultSet
	public ResultSet readTransResult() {	
         	//获取匹配物流表中的所有数据,返回ResultSet	
//Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
	}

程序设计

package com.qst.dms.entity;

import javax.swing.table.AbstractTableModel;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;

public class MatchedTableModel extends AbstractTableModel {
    // 使用ResultSet来创建TableModel
    private ResultSet rs;
    private ResultSetMetaData rsmd;
    // 标志位,区分日志和物流:1,日志;0,物流
    private int sign;

    public MatchedTableModel(ResultSet rs, int sign) {
        this.rs = rs;
        this.sign = sign;
        try {
            rsmd = rs.getMetaData();
        } catch (Exception e) {
            rsmd = null;
        }
    }

    // 获取表格的行数
    public int getRowCount() {
        try {
            rs.last();
            // System.out.println(count);
            return rs.getRow();
        } catch (Exception e) {
            return 0;
        }
    }

    // 获取表格的列数
    public int getColumnCount() {
        try {
            // System.out.println(rsmd.getColumnCount());
            return rsmd.getColumnCount();
        } catch (Exception e) {
            return 0;
        }
    }

    // 获取指定位置的值
    public Object getValueAt(int rowIndex, int columnIndex) {
        try {
            rs.absolute(rowIndex + 1);
            return rs.getObject(columnIndex + 1);
        } catch (Exception e) {
            return null;
        }
    }

    // 获取表头信息
    public String getColumnName(int column) {
        String[] logArray = { "日志ID", "采集时间", "采集地点", "状态", "用户名", "IP", "日志类型" };
        String[] tranArray = { "物流ID", "采集时间", "目的地", "状态", "经手人", "收货人",
                "物流类型" };
        return sign == 1 ? logArray[column] : tranArray[column];
    }
}



public static ResultSet readLogResult() {

    ResultSet matchedLogsResult = null;
    //获取匹配日志表中的所有数据,返回ResultSet
    //创建语句时使用:
    DBUtil db = new DBUtil();
    Connection conn = null;

    try {
        conn = db.getConnection();

        Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

        // 查询匹配的日志
        String querySqlMatchedLogs = "SELECT * FROM matchlogs";

        matchedLogsResult = db.executeQuery(querySqlMatchedLogs,null);

    } catch (Exception e) {
        e.printStackTrace();
    }
    return matchedLogsResult;
}
public ResultSet readTransResult() {
    //获取匹配物流表中的所有数据,返回ResultSet
    ResultSet matchedTransResult = null;
    //获取匹配日志表中的所有数据,返回ResultSet
    //创建语句时使用:
    DBUtil db = new DBUtil();
    Connection conn = null;
    ArrayList<MatchedTransport> matchedTrans = new ArrayList<>();

    try {
        conn = db.getConnection();
        Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

        // 查询匹配的日志
        String querySqlMatchedLogs = "SELECT * FROM matchtransports";

        matchedTransResult = st.executeQuery(querySqlMatchedLogs);

    } catch (Exception e) {
        e.printStackTrace();
    }
    return matchedTransResult;
}

测试

服务端

Server
客户端

5

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

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

相关文章

安装 PyCharm

网址&#xff1a;Download PyCharm: Python IDE for Professional Developers by JetBrains 安装文件&#xff1a; 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a; 正在安装&#xff1a; 安装完成&#xff1a;

ubuntu中下载、构建、使用raylib

目录 先决条件 [1]下载raylib方式一方式二 构建 [1]使用终端中使用Clion中使用 先决条件 [1] ubuntu系统上需要先安装GCC, make(或者cmake)和git (下载raylib) 执行下面的命令可以安装GCC,make,cmake,git sudo apt install build-essential git #build-essential是一套工具集…

2020年美国大学生数学建模竞赛A题向北移动解题全过程文档及程序

2020年美国大学生数学建模竞赛 A题 向北移动 原题再现&#xff1a; 全球海洋温度影响某些海洋生物的栖息地质量。当温度变化太大而无法持续生长时&#xff0c;这些物种便开始寻找其他更适合其现在和将来的生活和生殖的栖息地。在美国缅因州的龙虾种群中就可以看到一个例子&am…

C++底层分析

文章目录 进程的地址空间划分用户空间内核空间 程序的链接原理 进程的地址空间划分 任何的编程语言》产生两种东西&#xff1a;指令和数据 程序加载到内存中&#xff0c;不可能加载到物理内存。 linux系统会给当前进程分配一个2^32&#xff08;32位系统&#xff0c;4G&#xf…

python自动化测试selenium定位frame及iframe示例

这篇文章主要为大家介绍了python自动化测试selenium定位frame及iframe示例的示例详解&#xff0c;有需要的朋友可以借鉴参考下&#xff0c;希望能够有所帮助 frame标签有frameset、frame、iframe三种&#xff0c;frameset和其它普通标签没有区别&#xff0c;不会影响正常定位&…

电脑C盘哪些文件可以删除?最全总结分享!

“怎么会这样呢&#xff1f;我的电脑c盘明明没东西却爆满。实在不知道应该怎么处理了。有哪位朋友知道电脑c盘哪些文件可以删除吗&#xff1f;快来帮帮我吧&#xff01;” C盘是计算机中的系统盘&#xff0c;存储着操作系统和很多程序文件。在c盘中有些文件是不可以随意删除的&…

伙伴云CEO戴志康:我们为什么要做伙伴云?

分享嘉宾&#xff1a;戴志康&#xff0c;伙伴云CEO 以下为演讲实录⬇⬇⬇ 01选择人更少的一条路&#xff0c;从B级走向A级 我一直想和大家交流一个话题&#xff0c;关于我们为什么要做伙伴云。既代表我自己&#xff0c;同时也代表我们团队的一些想法。 我是一个怀疑论者。大…

如何助力企业DCMM贯标落地,这里有答案

DCMM作为国家第一个数据管理领域标准&#xff0c;是企业落实数据驱动战略、实现数字化转型的重要抓手。从行业实践来看&#xff0c;国内多个行业开始在全面拥抱DCMM模型&#xff0c;根据模型开展数据管理评估和能力提升工作。 01 什么是DCMM DCMM是国家标准《GB/T36073-2018 数…

3.15 Bootstrap 警告(Alerts)

文章目录 Bootstrap 警告&#xff08;Alerts&#xff09;可取消的警告&#xff08;Dismissal Alerts&#xff09;警告&#xff08;Alerts&#xff09;中的链接 Bootstrap 警告&#xff08;Alerts&#xff09; 本章将讲解警告&#xff08;Alerts&#xff09;以及 Bootstrap 所提…

vue3 使用字体 阿里巴巴矢量库字体

文章目录 下载相关文件 下载相关文件 1 输入iocnfont 找到阿里巴巴矢量库官网 2 进入字体库 选择字体 3 点击下载字体包 4 解压后 5 将下载包解压后将里面的文件一起 放到 assets 文件夹 自己创建的 字体包下面。 我这里放在了 assets/typeface/number 文件夹下(你那里…

SDWAN设备监控的五大方法

SD-WAN设备的监控是确保网络运行正常的重要环节。通过监控SD-WAN设备&#xff0c;您可以实时了解网络的性能、可用性和安全性&#xff0c;并采取必要的措施来解决问题。以下是一些常见的SD-WAN设备监控方法和工具&#xff1a; 1.设备管理界面&#xff1a;大多数SD-WAN设备都提…

132、仿真-基于51单片机主从串口通信家用防盗报警器设计(程序+Proteus仿真+流程图等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、设计功能 二、Proteus仿真图​编辑 三、程序源码 资料包括&#xff1a; 需要完整的资料可以点击下面的名片加下我&#xff0c;找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一&#xff1…

建筑结构健康监测,护航建筑结构安全稳定

摩天大楼通常是一个城市经济发展的象征&#xff0c;也是一个城市的标志性景观和地标&#xff0c;是展示城市形象的亮丽名片&#xff0c;我国在超高层建筑领域总体上已达到国际先进水平&#xff0c;统计数据显示&#xff0c;截至2020年4月&#xff0c;全世界最高的20座建筑物有1…

Vue教程(一):Vue核心

Vue教程(一&#xff09;:Vue核心 1.1 Vue简介 1.1.1 Vue是什么&#xff1f; 一套用于构建用户界面的渐进式JS框架。 1.1.2 谁开发的&#xff1f; ——尤雨溪。 2015-10-27 正式发布 Vue1.0.0 Evangelion&#xff08;新世纪福音战士&#xff09;2016-10-1 正式发布 Vue 2.…

【苹果日历推送】群发部署开发工具、SDK或框架,如APNs推送服务的HTTP/2接口

苹果日历本身并不直接支持群发推送通知&#xff0c;因为推送通知是针对单个设备的。如果你想向多个用户发送推送通知&#xff0c;你需要在自己的应用中实现推送功能&#xff0c;然后针对每个设备单独发送推送通知。 以下是实现推送通知的一般步骤&#xff1a; 开发推送服务&a…

【产品设计】通用后台管理系统需求及原型设计

后台管理系统&#xff0c;会根据不同公司、不同业务的要求做出改变。 网上很多系统的参考多数为业务中台&#xff0c;过于带有业务色彩。做过三四个后台管理系统&#xff0c;从中总结了一个通用的功能和需求设计模版&#xff0c;供大家参考。本文适用于0-2岁的产品经理做基础功…

如何用Jmeter做性能测试

目录 性能测试的概念 性能测试类型 性能测试应用场景&#xff08;领域&#xff09; 性能测试常用的指标 性能测试流程 需求分析 搭建测试环境 测试场景设计 测试用例设计和脚本开发 测试数据准备 性能测试执行和管理 性能测试结果分析与调优 测试报告和跟踪 性能测…

头版!《大同日报》和《大同晚报》报道大同互联网职业技术学院建设进程

近日&#xff0c;传智黑马主办的全日制统招大学——大同互联网职业技术学院备受关注&#xff0c;继前几日大同电视台采访我校&#xff0c;《大同日报》和《大同晚报》又在头版头条对我校的工程建设情况进行了详实报道。作为2023年省市两级重点工程项目&#xff0c;报道对我校在…

存量市场下,雅迪的高端化之路举步维艰?

为了让自家的高端产品成功“突围”&#xff0c;雅迪在营销上无所不用其极。 继在央视大楼高调发布后&#xff0c;近日雅迪冠能探索E10完成了力战70吨游艇、无惧24吨雨水冲刷、制霸百公里全地形等极限挑战&#xff0c;“树立起新一代两轮电动车豪华标杆旗舰”。 图源&#xff1…

cjson坑系列二cJSON_AddStringToObject、cJSON_AddItemToObject申请内存失败

在使用cjson的时候遇见这样一个问题&#xff08;先看问题代码&#xff0c;如下&#xff09; void platform_set_matrix_by_udp(cJSON* para, const char* str) {char* chintstr NULL, * intstr NULL;cJSON* index, * val;int ch;char* matrix;int number 0;int rows[8] { …