Java+SVNCloud+Mysql课程设计

文章目录

  • 1、主要内容
  • 2、所需准备
  • 3、与sql访问的中间类:SqlMessage
  • 4、窗口界面
  • 5、main方法

1、主要内容

课程设计,主要通过Javas wing创建窗口,jdbc连接云端mysql数据库进行基本操作,支持随机生成数据并用动态展示数据结果。

先来看一下实现效果:
在这里插入图片描述
在这里插入图片描述

2、所需准备

  1. 在SVNCloud上部署MySQL
  2. 下载所需Java包并导入到IDEA

请访问: SVNCloud 官网、JfreeChart下载、Mysql jar下载部署
等内容,形成类似以下的目录结构,若是代码建构过程发现错误,请仔细检查环境问题。
目录结构

3、与sql访问的中间类:SqlMessage

package Course_Design;
import java.sql.*;class DataStruct{   //数据结构体根据数据库内容依次定义String tim;     //时间String tmp;     //温度String hum;     //湿度String lit;     //光强
}
public class SqlMessage {static DataStruct selected;     //选中的数据存储到这里static DataStruct prepared;     //即将改写的数据存到这里//查询语句等结构static Connection connection;static Statement statement;static PreparedStatement st;static ResultSet result;SqlMessage(){selected = new DataStruct();prepared = new DataStruct();}void SqlInit() throws SQLException, ClassNotFoundException{//  1.加载驱动Class.forName("com.mysql.cj.jdbc.Driver");//  2.用户信息和url,请注意加上useSSL = false,否则连接失败String url = "jdbc:mysql://sql.wsfdb.cn:3306/ Database(请改为你的数据库名称) ?useSSL=false";//url: jdbc:mysql:// + 目的地址 + 端口号 + 数据库名称? + 其他,这里请确保你在SVNCloud建立了数据库且可以通过navicat等工具正常连接String username="username";	//用户名String password="******";	//密码//  3.连接成功,数据库对象 Connectionconnection = DriverManager.getConnection(url,username,password);//  4.绑定statement = connection.createStatement();}void SendMessage(String sql)throws SQLException {       //发送sql语句(有结果集版本)result = statement.executeQuery(sql);}void upDate(String sql) throws SQLException {           //发送sql语句(无结果集版本)st = connection.prepareStatement(sql);System.out.println("execute:"+sql);int res = st.executeUpdate();if(res > 0){System.out.println("数据更新成功:"+res);}st.close();}void CloseAll()throws SQLException {		//关闭数据库statement.close();connection.close();}
}

4、窗口界面

package Course_Design;import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Random;public class MyWindow {static SqlMessage sys = new SqlMessage();static int connect_flag = 0;//是否连接数据库的标识,当连接数据库时,生成数据失效static JTextField Edit_tim; //时间文本区域static JTextField Edit_tmp; //温度文本区域static JTextField Edit_hum; //湿度文本区域static JTextField Edit_lit; //光强文本区域static JButton BTN_add = new JButton("添加数据"); //添加static JButton BTN_del = new JButton("删除数据"); //删除static JButton BTN_mod = new JButton("修改数据"); //修改static JButton BTN_sum = new JButton("生成数据"); //生成static JButton BTN_con = new JButton("连接/断开");//连接与断开SQLstatic JButton BTN_lad = new JButton("刷新");     //刷新数据static JFrame window = new JFrame("传感器信息操作系统");static JTable table;static MyTableModel model;private Box getPanel() { //绘制所有小控件//建议panel内部使用GridLayout布局,Panel之间使用Box布局更加美观Box Vbox1 = Box.createVerticalBox();Box Vbox2 = Box.createVerticalBox();Panel Vbox3 = new Panel(new GridLayout(3,2));Box Vbox4 = Box.createVerticalBox();Box Hbox  = Box.createHorizontalBox();JLabel label1 = new JLabel("时间:");Edit_tim = new JTextField(10);JLabel label2 = new JLabel("温度:");Edit_tmp = new JTextField(10);JLabel label3 = new JLabel("湿度:");Edit_hum = new JTextField(10);JLabel label4 = new JLabel(" 光强:");Edit_lit = new JTextField(10);//label 与 text edit 加入窗体Vbox1.add(label1);Vbox2.add(Edit_tim);Vbox1.add(label2);Vbox2.add(Edit_tmp);Vbox1.add(label3);Vbox2.add(Edit_hum);Vbox1.add(label4);Vbox2.add(Edit_lit);// 按键加入窗体,创建消息映射Vbox3.add(BTN_add); BTN_add.addActionListener(e -> On_BTN_add());Vbox3.add(BTN_del); BTN_del.addActionListener(e -> On_BTN_del());Vbox3.add(BTN_mod); BTN_mod.addActionListener(e -> On_BTN_mod());Vbox3.add(BTN_sum); BTN_sum.addActionListener(e -> On_BTN_sum());Vbox3.add(BTN_con); BTN_con.addActionListener(e -> On_BTN_con());Vbox3.add(BTN_lad); BTN_lad.addActionListener(e -> On_BTN_lad());Hbox.add(Vbox1);Hbox.add(Vbox2);Panel func = new Panel(new GridLayout(1,0));func.add(BTN_Func_Summon);BTN_Func_Summon.addActionListener(e -> On_BTN_Func_Summon());func.add(BTN_Func_Drawer);BTN_Func_Drawer.addActionListener(e -> On_BTN_Func_Drawer());Vbox4.add(func);Vbox4.add(Box.createVerticalStrut(70));Vbox4.add(Hbox);Vbox4.add(Box.createVerticalStrut(40));Vbox4.add(Vbox3);return Vbox4;}public void InitWindow(){   //初始化table主窗体window.setSize(600,400);window.setResizable(false);window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 初始化表格形式,选择信号为行选Object[][] tableData = new Object[0][4];    //表格内容String[] names = {"时间","温度","湿度","光强"};  //设置表头model = new MyTableModel(tableData,names);table = new JTable(model);table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//设置table点击事件,点击即选中单行table.addMouseListener(new MouseListener() {@Override public void mouseClicked(MouseEvent e) {On_Table_clicked();}@Override public void mousePressed(MouseEvent e) {}@Override public void mouseReleased(MouseEvent e) {}@Override public void mouseEntered(MouseEvent e) {}@Override public void mouseExited(MouseEvent e) {}});//将table放入JScrollPane以便于滚动表格JScrollPane scrollPane = new JScrollPane(table);//开始布局控件JPanel panel1 = new JPanel();panel1.add(scrollPane);JPanel panel2 = new JPanel();panel2.add(getPanel());JPanel total = new JPanel();total.add(panel1);total.add(panel2);//加入控件window.add(total);window.pack();window.setVisible(true);}void On_BTN_add(){if (connect_flag == 0){Update_Field();model.addRow(GetObject());}else{String sql = "Insert Into visual_sensor values('"+SqlMessage.prepared.tim+"',"+SqlMessage.prepared.tmp+","+SqlMessage.prepared.hum+","+SqlMessage.prepared.lit+");";try {sys.upDate(sql);Update_Field();model.addRow(GetObject());} catch (SQLException e) {throw new RuntimeException(e);}}}void On_BTN_del(){if(connect_flag == 0){int flag = table.getSelectedRow();if(flag == -1) {JOptionPane.showMessageDialog(null, "未选择删除元素", "错误",JOptionPane.ERROR_MESSAGE);}else{model.removeRow(table.getSelectedRow());}}else{String sql = "Delete from visual_sensor Where time='"+ SqlMessage.selected.tim + "' and temperature = "+ SqlMessage.selected.tmp + " and humidity = "+ SqlMessage.selected.hum + " and light = "+ SqlMessage.selected.lit + ";";try {sys.upDate(sql);model.removeRow(table.getSelectedRow());} catch (SQLException e) {throw new RuntimeException(e);}}}void On_BTN_mod(){if (connect_flag == 0){On_BTN_del();On_BTN_add();}else{String sql = "Update visual_sensor set time = '"+SqlMessage.prepared.tim+ "', temperature = "+SqlMessage.prepared.tmp+ ", humidity = "+SqlMessage.prepared.hum+ ",light = "+SqlMessage.prepared.lit+ " where time = '"+SqlMessage.selected.tim+ "' AND temperature = "+SqlMessage.selected.tmp+ " AND humidity = "+SqlMessage.selected.hum+ " AND light = "+SqlMessage.selected.lit+ ";";try {sys.upDate(sql);//避免重复执行sql节约资源connect_flag = 0;On_BTN_del();On_BTN_add();connect_flag = 1;} catch (SQLException e) {throw new RuntimeException(e);}}}void On_BTN_sum(){//生成数据并填入缓冲区//数据均采用两位小数//格式化时间 时:分:秒LocalTime time = LocalTime.now();DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");String tm = time.format(formatter);SqlMessage.prepared.tim = tm;//格式化湿度 0-1double rand1=Math.random();String hum="0";hum += new DecimalFormat(".00").format(rand1);SqlMessage.prepared.hum = hum;//格式化光强 0-600double rand21=Math.random();Random random = new Random();int rand22 = random.nextInt(600);String light = rand22 + new DecimalFormat(".00").format(rand21);SqlMessage.prepared.lit = light;//格式化温度 18-34double rand31=Math.random();int rand32 = random.nextInt(16)+18;String tmp = rand32 + new DecimalFormat(".00").format(rand31);SqlMessage.prepared.tmp = tmp;//打印提示信息System.out.println("Summon column as\t"+tm+"\t"+tmp+"\t"+hum+"\t"+light);ShowInfo();}void On_BTN_con(){//切换sql连接状态,默认关闭,点击开启后直接读取DB table信息并加载if(connect_flag == 0){try {sys.SqlInit();System.out.println("Connect sql successfully!");connect_flag =1;} catch (SQLException | ClassNotFoundException e) {System.out.println("Connect sql failed!");throw new RuntimeException(e);}}else{try {sys.CloseAll();System.out.println("Close sql successfully!");connect_flag = 0;} catch (SQLException e) {System.out.println("Close sql failed!");throw new RuntimeException(e);}}}void On_BTN_lad(){if(connect_flag == 1){String sql = "select * from visual_sensor;";try {sys.SendMessage(sql);model.setRowCount(0);while(SqlMessage.result.next()){//改为在窗口上显示Object[] ob = new Object[4];ob[0] = SqlMessage.result.getString("time");ob[1] = SqlMessage.result.getString("temperature");ob[2] = SqlMessage.result.getString("humidity");ob[3] = SqlMessage.result.getString("light");model.addRow(ob);}SqlMessage.result.close();}catch (SQLException e) {System.out.println("加载数据异常");throw new RuntimeException(e);}}else{JOptionPane.showMessageDialog(null, "请连接数据库后刷新", "错误",JOptionPane.ERROR_MESSAGE);}}void On_Table_clicked(){int flag = table.getSelectedRow();if (flag!= -1){SqlMessage.prepared.tim = table.getValueAt(flag,0).toString();SqlMessage.prepared.tmp = table.getValueAt(flag,1).toString();SqlMessage.prepared.hum = table.getValueAt(flag,2).toString();SqlMessage.prepared.lit = table.getValueAt(flag,3).toString();SqlMessage.selected.tim = SqlMessage.prepared.tim;SqlMessage.selected.tmp = SqlMessage.prepared.tmp;SqlMessage.selected.hum = SqlMessage.prepared.hum;SqlMessage.selected.lit = SqlMessage.prepared.lit;ShowInfo();}}void ShowInfo(){Edit_lit.setText(SqlMessage.prepared.lit);Edit_tmp.setText(SqlMessage.prepared.tmp);Edit_hum.setText(SqlMessage.prepared.hum);Edit_tim.setText(SqlMessage.prepared.tim);}Object[] GetObject(){Object[] ob = new Object[4];ob[0] = SqlMessage.prepared.tim;ob[1] = SqlMessage.prepared.tmp;ob[2] = SqlMessage.prepared.hum;ob[3] = SqlMessage.prepared.lit;return ob;}void Update_Field(){SqlMessage.prepared.tim = Edit_tim.getText();SqlMessage.prepared.tmp = Edit_tmp.getText();SqlMessage.prepared.hum = Edit_hum.getText();SqlMessage.prepared.lit = Edit_lit.getText();}//***********************************************生成与绘制功能模块主要内容**********************************************Timer timer = new Timer(1000, e -> {//1秒生成一个数据,通过模拟按键实现On_BTN_sum();Insert_DataSet();On_BTN_add();});static JButton BTN_Func_Summon = new JButton("生成器");static JButton BTN_Func_Drawer = new JButton("制表器");void On_BTN_Func_Summon(){if(!timer.isRunning()){timer.start();System.out.println("Timer running ... ...");}else{timer.stop();System.out.println("Timer stopped ... ...");}}DefaultCategoryDataset dataset = new DefaultCategoryDataset();void On_BTN_Func_Drawer(){JFreeChart chart = ChartFactory.createLineChart("DataSet","Collected Time","Values(%)",dataset,PlotOrientation.VERTICAL,true,false,false);ChartFrame chartFrame = new ChartFrame("Course Design",chart);chartFrame.pack();chartFrame.setVisible(true);}void Insert_DataSet(){dataset.addValue((Double.parseDouble(SqlMessage.prepared.tmp)-18)/0.16,"temperature",SqlMessage.prepared.tim);dataset.addValue(Double.parseDouble(SqlMessage.prepared.hum)*100,"humidity",SqlMessage.prepared.tim);dataset.addValue(Double.parseDouble(SqlMessage.prepared.lit)/6,"light",SqlMessage.prepared.tim);}
}class MyTableModel extends DefaultTableModel{//自己构建表格模型,删除表格内编辑属性@Overridepublic boolean isCellEditable(int row, int column) {return false;}public MyTableModel(Object[][] data, Object[] columnNames) {setDataVector(data, columnNames);}
}

5、main方法

package Course_Design;
import java.sql.*;public class Conn {public static void main(String[] args) throws SQLException, ClassNotFoundException {MyWindow window = new MyWindow();window.InitWindow();}
}
//请注意将上面三个类放在一个软件包里,并用packge 包名;

看到最后,如果觉得对你有帮助,不妨点个关注,到主页看看我的其他作品,欢迎下次光临。

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

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

相关文章

自学 Java 怎么入门?

关于自学 Java 如何入门这一重要课题,在此为大家进行详细阐述。 在此之前,如果大家有兴趣的话,可以看看我自己精心整理的嵌入式入门资料,这些资料将全部免费送给大家。其中包含了编程教学内容、详细的视频讲解、实用的数据库资料…

Vue 实例

一、页面效果图 二、代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><script src"../vue.js" type"text/javascript"></script><title>vue 实例</title></head><body>&l…

Linux命令篇(一):文件管理部分

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 1、cat命令常用参…

HALCON-从入门到入门-图像格式的互相转换

1.废话 上次说到了图片的读取和写入到本地&#xff0c;这次说一下图片的格式相关。 位图和矢量图 photoshop处理出来的图片肯定叫做图片&#xff0c;那么coreDraw处理出来的图片是不是也叫图片。 之间就有区分&#xff0c;一种叫做位图&#xff0c;一种叫做矢量图 位图和矢…

创建一个支持切换阅读模式和答题模式的Anki问答题模板

为了备考某个需要默写的科目&#xff0c;做了个问答题笔记模板&#xff0c;如下&#xff1a; 在上图的回答栏填写答案后&#xff0c;点击显示答案按钮转到背面&#xff1a; 只实现上面的功能是很简单的&#xff0c;直接基于Anki自带的问答题模板添加自己需要的字段即可。问题…

基于卷积-小波神经网络的SAR图像海冰变化检测方法(MATLAB R2018A)

海冰是冰冻圈的重要组成部分&#xff0c;海冰的变化信息对航行安全和自然资源开采等非常重要&#xff0c;许多船舶没有加固防冰设备&#xff0c;因此&#xff0c;必须避开所有的冰区。尤其当冰压很高时&#xff0c;即使破冰船也很难在冰层中前行。为了安全航行&#xff0c;获取…

自动化办公01 smtplib 邮件⾃动发送

目录 一、准备需要发送邮件的邮箱账号 二、发送邮箱的基本步骤 1. 登录邮箱 2. 准备数据 3. 发送邮件 三、特殊内容的发送 1. 发送附件 2. 发送图片 3. 发送超文本内容 4.邮件模板内容 SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;即简单邮件传输协议…

天气数据集-Jena Climate dataset

天气数据集-Jena Climate dataset 1.数据集基本信息 Dataset Name: mpi_saale_2021b.csv Size: 26495 rows; 1 year (2021), 10 min 气象学、农业、环境科学 开源机构: Max Planck Institute for Biogeochemistry 2.数据特征 2.1 特征简介 数据共有31个特征&#xff0c;…

使用 Scapy 库编写 Ping of Death 攻击脚本

一、介绍 1.1 概述 Ping of Death&#xff08;PoD&#xff09;攻击是一种历史悠久的拒绝服务&#xff08;DoS&#xff09;攻击&#xff0c;攻击者通过发送特制的畸形ICMP Echo请求数据包&#xff0c;导致目标系统无法正确处理&#xff0c;从而导致系统崩溃、重启或无法响应正…

【最新鸿蒙应用开发】——什么是状态管理?

状态管理 在声明式UI编程框架中&#xff0c;UI是程序状态的运行结果&#xff0c;用户构建了一个UI模型&#xff0c;其中应用的运行时的状态是参数。当参数改变时&#xff0c;UI作为返回结果&#xff0c;也将进行对应的改变。这些运行时的状态变化所带来的UI的重新渲染&#xf…

【Postman接口测试】第四节.Postman接口测试项目实战(上)

文章目录 前言一、项目介绍 1.1 项目界面功能介绍 1.2 项目测试接口介绍 1.3 项目测试接口流程二、HTTP协议三、接口测试中接口规范四、项目合同新增业务介绍 4.0 接口测试用例设计流程 4.1 登录接口调试 4.2 登录接口自动关联 4.3 添加…

攻防世界---web---Web_php_unserialize

1、题目描述 2、 3、分析代码 class Demo { private $file fl4g.php; }&#xff1a;定义了一个名为Demo的类&#xff0c;该类有一个私有属性$file&#xff0c;默认值为fl4g.php。 $a serialize(new Demo);&#xff1a;创建了一个Demo类的实例&#xff0c;并对其进行序列化&a…

【机器学习】基于OpenCV和TensorFlow的MobileNetV2模型的物种识别与个体相似度分析

在计算机视觉领域&#xff0c;物种识别和图像相似度比较是两个重要的研究方向。本文通过结合深度学习和图像处理技术&#xff0c;基于OpenCV和TensorFlow的MobileNetV2的预训练模型模&#xff0c;实现物种识别和个体相似度分析。本文详细介绍该实验过程并提供相关代码。 一、名…

eNSP学习——VRRP基础配置

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、部署OSPF网络 3、配置VRRP协议 4、验证VRRP主备切换 主要命令 //创建备份组 [R2]int g0/0/1 [R2-GigabitEthernet0/0/1]vrrp vrid 1 virtual-ip 192.168.1.254 //修改优先级 …

自动评论自动私信引流系统,自动化时代的挑战与机遇

随着科技的飞速发展&#xff0c;自动化技术已经渗透到我们生活的方方面面。从工业生产线上的机械臂到家庭中的智能助手&#xff0c;自动化不仅改变了我们的工作方式&#xff0c;也在重塑着社会的面貌。然而&#xff0c;在享受自动化带来的便利和效率的同时&#xff0c;我们也必…

Java实现对PDF、纵向、横向页面添加自定义水印功能

Java实现对PDF、纵向、横向页面添加自定义水印 效果图 -- 纵向 页面PDF使用到JAR Maven依赖版本效果图 -- 横向页面PDF 效果图 – 纵向 页面PDF 代码如下&#xff1a; 使用到JAR Maven依赖版本 <dependency><groupId>org.apache.pdfbox</groupId><artifa…

FLINK-窗口算子

参考资料 官方文档- WindowFlink中的时间和窗口之窗口 窗口 在流处理中&#xff0c;我们往往需要面对的是连续不断、无休无止的无界流&#xff0c;不可能等到所有所有数据都到齐了才开始处理。所以聚合计算其实只能针对当前已有的数据——之后再有数据到来&#xff0c;就需要继…

【计算机毕设】SpringBoot校园资料分享平台的设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本项目旨在设计并实现一个基于SpringBoot的校园资料分享平台&#xff0c;以满足学生在学习过程中对资料分享和获取的需求。具体目标包括&#xff1a…

ServletContext

一、ServletContext对象简介 ServletContext 是应用上下文对象。每一个应用中只有一个 ServletContext 对象, 这个ServletContext 对象被所有Servlet所共享. 在 Servlet 规范中&#xff0c;一共有 4 个域对象。ServletContext 就是其中的一个。它也是 web 应用中最大的作用域&a…

装饰器,状态管理和if判断(HarmonyOS学习第六课)

Builder装饰器-自定义构建函数 前面介绍了如何创建一个自定义组件。该自定义组件内部UI结构固定&#xff0c;仅与使方法进行数据传递。ArkUI还提供了一种更轻量的UI 元素复用机制Builder&#xff0c;Builder 所装饰的函数遵循build( )函数语法规则&#xff0c;开发者可以将重…