jsp实现增删改查——(三)用Echarts图表统计学生信息

学生信息CRUD——Echarts显示生活费

目录结构

image-20240403155227034

创建一个js文件夹,将echarts.min.js放到里面。

功能实现

与之前我们写的jsp文件(含有html代码、Java代码)不同的是,实现Echarts对生活费的显示,需要调用echarts.min.js,需要使用javascriptjs代码。

js代码的书写

使用标签<script></script>

head内容

<head><title>学生生活费统计</title><script src="../js/echarts.min.js"></script>
</head>

在head部分,需要用<script>标签将我们的echarts.min.js文件引入。

body内容

1.html代码
//html代码
<div id="show" style="width: 800px; height: 600px"></div>

说明

  • id:随便取一个就行。
  • style:必须设置一个长和宽,否则会显示不出来。
  • div的作用:为之后我们的echarts画出一块显示范围。因此,<div>标签的划定必须在图表的显示之前给出才可以。
2.js代码
<script>//js代码var mychart = echarts.init( document.getElementById("show") );
</script>

说明:

  • mychart是变量名,自己随便取即可。
  • echarts.init()方法,进行图表的初始化工作。
  • echarts.init()方法括号内的参数,即为“在哪个html区域进行初始化”,因此,通过js提供的document.getElementById(“show”)来获取我们刚才划分好的div区域,在此区域上进行init初始化工作。
<script>//js代码var mychart = echarts.init( document.getElementById("show") );//创建图表的配置项和数据var option = {title: {text: '学生生活费统计表'},tooltip:{},legend: {data:['元']},xAxis: {data: <%=xdata%>	// ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]},yAxis: {},series: [{name: '元',type: 'bar',data: <%=ydata%>	//[5, 20, 36, 10, 10, 20]}]   };
</script>

说明:

  • 有哪些参数,各个参数的功能、应该怎样配置,Echarts有对应官方文档,可自行查阅。
  • 对于各个参数的设置,即Key-Value键值对,是要依照文档规定来的,例如Key,它提供了哪些,就是哪些,不能自己编没有的Key出来,也不能将原有的Key作更改。Value也要按规定进行合法的赋值。
  • var option = {}的内容,实际上采用的是JSON语法。
  • var option = {}的具体内容,不需要背诵,复制粘贴过来之后会修改即可。
  • 其中参数的含义说明:
    • title:该图表的标题
    • tooltip:不知道。
    • legend:图例。
    • xAxis:横坐标轴上的数据信息。格式如:["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
    • yAxis:纵坐标轴上的数据信息。
    • series:
      • name:把鼠标放在图表的柱、饼上面时,显示的信息。
      • type:图表类型,柱状图、饼状图……。
      • data:横轴各数据信息对应在纵轴的数值数据。格式如:[5, 20, 36, 10, 10, 20]

注意

1.对于legend中的data,即“图例”;以及series中的name,即鼠标悬停时显示的信息。它们两个的内容必须一致,比如图例上显示的是”元“,那么鼠标悬停也要显示”元“。若不一致,则图例会消失、不显示,只有鼠标悬停时显示的信息。

2.对于xAxis中的data,以及series中的data,无论是["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"],还是[5, 20, 36, 10, 10, 20],其本质都是String类型的字符串

也就是说,对于静态传参而言,你传递的是[5, 20, 36, 10, 10, 20]

那么,如果你想让它动态变化,从数据库拿数据,那你就把数据取出来之后加工成与[5, 20, 36, 10, 10, 20]一模一样的字符串就可以了。即:一个"["、一个"5"、一个","、一个"20"、……、一个"20"、一个"]"。多一个字符、少一个字符都不行。

对于["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"],本质的原理同上,但它的不同之处在于,当你使用String字符串类型来保存这一串字符的时候,由于其中有双引号,而双引号内部不能有双引号,因此,双引号内部的双引号需要加上转义字符,即:

String str1 = "[\"衬衫\",\"羊毛衫\",\"雪纺衫\",\"裤子\",\"高跟鞋\",\"袜子\"]"

所以,在它进行传参的时候,也要把转义字符带上。

这样看上去比较麻烦,我们其实也有更好的方法。——由于双引号中不能有双引号,因此必须加转义字符。但是,双引号中可以有单引号,我们使用单引号也是一样的效果。即:

String str2 = "['衬衫','羊毛衫','雪纺衫','裤子','高跟鞋','袜子']"

3.我们代码当中的<%=xdata%><%=ydata%>,其中的xdataydata是我们写的Java代码所提供的变量。(下文有)——因此,Java代码也要写在前面才可以。

<script>//js代码var mychart = echarts.init( document.getElementById("show") );//创建图表的配置项和数据var option = {title: {text: '学生生活费统计表'},tooltip:{},legend: {data:['元']},xAxis: {data: <%=xdata%>	// ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]},yAxis: {},series: [{name: '元',type: 'bar',data: <%=ydata%>	//[5, 20, 36, 10, 10, 20]}]   };//将我们写好的option交给echartsmychart.setOption(option);
</script>

最后,使用mychart.setOption(option);将我们编辑好的option设置完成。其中,mychart是init出来的初始化图表对象。

3.Java代码

与jsp中的Java代码一样,用<% %>括起来写。

首先思考,对于“生活费统计图表”而言,我们想要将数据动态地显示到图表内,需要从数据库获取到的数据为:

1)横轴:各个学生的姓名,即表中的sname字段。

2)数值:各个学生的生活费,即表中的money字段。

这个很容易,就与之前我们做的“查询、修改、删除”一样,链接数据库,执行SQL语句……即可。

但问题在于,我获取了sname,我获取了money,之后怎么以正确的格式显示到图表上?

重点:因此,关键之处就在于,怎样能够将数据库中查询到的数据,转换为echarts规定能够接收的赋值形式,即符合接收格式的String字符串,即类似于

"['衬衫','羊毛衫','雪纺衫','裤子','高跟鞋','袜子']"

[5, 20, 36, 10, 10, 20]

这样的字符串。每个中括号、每个引号、每个逗号,都不能多、也不能少。

因此,要会使用Java的字符串相关操作,如:截取子串函数substring(起始索引, 末尾索引);利用"+"操作符来拼接字符串……等等。

另外,可以使用System.out.println(str)先打印显示一下看看字符串对不对,确认字符串格式正确了,传给图表,图表就一定能显示出来了。而不要改一次就运行一次然后直接去看图表能不能出的来。

链接数据库

Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mywork", "root", "123456");

执行SQL语句

PreparedStatement pstmt = conn.prepareStatement("select * from student");
ResultSet rs = pstmt.executeQuery();

处理数据

已经获取到rs数据集合,从中遍历,并调整字符串拼接格式即可。

//前中括号先赋值进来
String xdata = "[";
String ydata = "[";//读出每个字段的值的同时,进行格式调整,例如加引号、加逗号等
while(rs.next())
{xdata += "'" + rs.getObject("sname") + "',";	//看清楚是几个单引号、几个逗号。不要乱打空格。ydata += rs.getObject("money") + ",";
}//经过while循环获得的数据有一个问题:最后会多出来1个逗号,我们要把这1个逗号给去掉
//方法:使用“截取子串substring()”函数,把最后一个逗号去掉
//字符串从0开始好说,怎样知道字符串最后一个字符的位置?用str.length()即可。注意下标。
xdata = xdata.substring(0, xdata.length()-1);
ydata = ydata.substring(0, ydata.length()-1);//最后再把后中括号补上
xdata += "]";
ydata += "]";//可以在控制台输出一下字符串看看对不对
//System.out.println(xdata);
//System.out.println(ydata);

关闭链接

rs.close();
pstmt.close();
conn.close();

完整代码

<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %><%--Created by IntelliJ IDEA.User: 11202Date: 2024/4/3Time: 16:38To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>学生生活费统计表</title><script src="../js/echarts.min.js"></script>
</head>
<body><%//Java代码Class.forName("com.mysql.cj.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mywork", "root", "123456");PreparedStatement pstmt = conn.prepareStatement("select * from student");ResultSet rs = pstmt.executeQuery();//数据处理成符合要求的字符串String xdata = "[";String ydata = "[";while(rs.next()) {xdata += "'" + rs.getObject("sname") + "',";ydata += rs.getObject("money") + ",";}//把最后多余的一个逗号去除掉,使用substring截取子串来实现xdata = xdata.substring(0, xdata.length()-1);ydata = ydata.substring(0, ydata.length()-1);//把后括号补上xdata += "]";ydata += "]";//关闭链接rs.close();pstmt.close();conn.close();%><!-- html代码 --><div id="show" style="width: 900px; height: 600px"></div><script>//js代码var mychart = echarts.init( document.getElementById("show") );//配置图表的optionvar option = {title: {text: '学生生活费统计表'},tooltip: {},legend: {data: ['元']},xAxis: {data: <%=xdata%>},yAxis: {},series: [{name: '元',type: 'bar',data: <%=ydata%>}]};//将option应用到echartsmychart.setOption(option);</script></body>
</html>

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

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

相关文章

OpenHarmony实战:CMake方式组织编译的库移植

以double-conversion库为例&#xff0c;其移植过程如下文所示。 源码获取 从仓库获取double-conversion源码&#xff0c;其目录结构如下表&#xff1a; 表1 源码目录结构 名称描述double-conversion/cmake/CMake组织编译使用到的模板double-conversion/double-conversion/源…

界面控件Kendo UI for jQuery 2024 Q1亮点 - 新的ToggleButton组件

Telerik & Kendo UI 2024 Q1 版本于2024年初发布&#xff0c;在此版本中将AI集成到了UI组件中&#xff0c;在整个产品组合中引入AI Prompt组件以及10多个新的UI控件、支持Angular 17、多个数据可视化功能增强等。 P.S&#xff1a;Kendo UI for jQuery提供了在短时间内构建…

C++核心编程——4.2(2)对象的初始化和清理

4.2.5 深拷贝与浅拷贝 浅拷贝&#xff1a;编译器提供的简单的赋值拷贝操作 深拷贝&#xff1a;在堆区重新申请空间&#xff0c;进行拷贝操作 示例&#xff1a; class Person { public://无参&#xff08;默认&#xff09;构造函数Person() {cout << "无参构造函数…

基于Uni-app的体育场馆预约系统的设计与实现

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…

电商技术揭秘六:前端技术与用户体验优化

文章目录 引言一、前端技术在电商中的重要性1.1 前端技术概述1.2 用户体验与前端技术的关系 二、响应式设计与移动优化2.1 响应式设计的原则2.2 移动设备优化策略2.3 响应式设计的工具和框架 三、交互设计与用户体验提升3.1 交互设计的重要性3.2 用户体验的量化与优化3.3 通过前…

asf是什么格式的文件?用手机怎么打开?

由于手机操作系统和硬件的限制&#xff0c;大部分手机并不直接支持asf文件的播放。因此&#xff0c;如果你想在手机上打开asf文件&#xff0c;你可能需要先将文件转换为手机支持的格式&#xff0c;如MP4。可以通过使用一些视频转换软件来实现&#xff0c;比如野葱视频转换器。 …

RuoYi-Vue若依框架-集成mybatis-plus报错Unknown column ‘search_value‘ in ‘field list‘

报错信息 ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column search_value in field list ### The error may exist in com/ruoyi/sales/mapper/ZcSpecificationsMapper.java (best guess) ### The error may involve defaultParameter…

2024 批量下载公众号文章内容/阅读数/在看数/点赞数/留言数/粉丝数导出pdf文章备份(带留言):公众号集思录近6000篇历史文章在线查看,找文章方便了

关于公众号文章批量下载&#xff0c;我之前写过很多文章&#xff1a; 视频更新版&#xff1a;批量下载公众号文章内容/话题/图片/封面/音频/视频&#xff0c;导出html&#xff0c;pdf&#xff0c;excel包含阅读数/点赞数/留言数 2021陶博士2006/caoz的梦呓/刘备我祖/六神读金…

go: go.mod file not found in current directory or any parent directory.如何解决?

这个错误表明你正在执行 go get 命令&#xff0c;但是当前目录或任何父目录中都找不到 go.mod 文件。这可能是因为你的项目还没有使用 Go Modules 进行管理。 要解决这个问题&#xff0c;有几种方法&#xff1a; go mod init <module-name> 其中 <module-name>…

构建第一个ArkTS应用(Stage模型)

创建ArkTS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。选择Application应用开发&#xff08;本文以应用开发为例&#xff0c;Atomic Servi…

QT - 日志:qDebug/qInfo/qWarning/qCritical

篇一、日志打印函数 头文件&#xff1a; #include <QDebug> 代码&#xff1a;qDebug()<<"hello world!"; 其他打印级别&#xff1a; qInfo(): 普通信息 qDebug(): 调试信息 qWarning(): 警告信息 qCritical(): 严重错误 qFatal(): 致命错误 1. qDebug…

【Unity 实用工具篇】| Unity中 实现背景模糊效果,简单易用

前言【Unity 实用工具篇】| Unity 实现背景模糊效果,简单易用一、实现背景模糊效果1.1 介绍1.2 效果展示1.3 使用说明及下载二、插件资源简单介绍2.1 导入下载好的资源2.2 功能介绍2.2.1 捕获特效2.2.2 高级选项

String Encryptor custom Bean not found with name ‘jasyptStringEncryptor‘...

项目采用 spring boot 2.6.13 jasypt-spring-boot-starter 3.0.5 apollo-client 1.6.0 自定义jasyptStringEncryptor&#xff0c;服务器上启动死活报找不到bean jasyptStringEncryptor&#xff0c;采用默认的&#xff0c;密文配置项自然解密失败导致服务无法启动。 经过一…

Layui三级联动插件使用方法

Layui高版本中没有在提供三级联动这个动画了&#xff0c;而是封装成了一个插件&#xff0c;使用方式也很简单 官网 省市县区三级联动下拉选择器 layarea - Layui 第三方扩展组件平台 (layuion.com)https://dev.layuion.com/extend/layarea/#doc html页面约束 整个选择器需要…

VSCode安装及Python、Jupyter插件安装使用

VSCode 介绍 Visual Studio Code&#xff08;简称VSCode&#xff09;是一个由微软开发的免费、开源的代码编辑器。VSCode是一个轻量级但是非常强大的代码编辑器&#xff0c;它支持多种编程语言&#xff08;如C,C#&#xff0c;Java&#xff0c;Python&#xff0c;PHP&#xff0…

UE4_材质节点

UE4_材质节点 2017-12-07 13:56 跑九宫格 跑UV 评论(0)

【Java EE】Maven jar 包下载失败问题的解决方法

文章目录 1. 配置好国内的Maven源1.1配置当前项⽬setting1.2设置新项⽬的setting 2.重新下载jar包3.其他问题⭕总结 1. 配置好国内的Maven源 因为中央仓库在国外, 所以下载起来会⽐较慢, 所以咱们选择借助国内⼀些公开的远程仓库来下载资源 接下来介绍, 如何设置国内源 1.1配…

Paddle实现人脸对比

人脸对比 人脸对比&#xff0c;顾名思义&#xff0c;就是对比两个人脸的相似度。本文将用Paddle实现这一功能。 PS&#xff1a;作者肝了整整3天才稍微搞明白实现方法 数据集准备 这里使用百度AI Studio的开源数据集&#xff1a; 人脸数据_数据集-飞桨AI Studio星河社区 (b…

HarmonyOS应用开发ArkUI(TS)电商项目实战

项目介绍 本项目基于 HarmonyOS 的ArkUI框架TS扩展的声明式开发范式&#xff0c;关于语法和概念直接看官网官方文档地址&#xff1a;基于TS扩展的声明式开发范式&#xff0c; 工具版本&#xff1a; DevEco Studio 3.1 Canary1 SDK版本&#xff1a; 3.1.9.7&#xff08;API V…

Failed to resolve import “Home/components/HomeNew.vue“. Does the file exist?

错误信息 [plugin:vite:import-analysis] Failed to resolve import "/apis/home.js" from "src/views/Home/components/HomeNew.vue". Does the file exist? 错误原因 路径错误 解决方法