Java三部曲(二)JavaWeb

2023-11-06

前言

1.什么是JavaWeb?

Web:全球广域网,也成为万维网(www),能通过浏览器访问的网站。

JavaWeb:用Java开发网站的技术栈。

2.本教程的基础框架

网页端:展现数据

HTML:制作页面

CSS:美化页面

JavaScript:产生丰富的动态效果

Ajax+Vue+ElementUI:前端框架技术

数据库:存储和管理数据

MySQL:关系型数据库

JDBC:Java语言操作数据库的api

Maven:项目管理框架

MyBatis:简化操作JDBC的框架

JavaWeb程序:逻辑处理

Tomcat+HTTP+Servlet:

Request+Response:

JSP:

Cookies+Session:

Filter+Listener:

一.数据库

1.1数据库相关概念

数据库:

存储数据的仓库,数据是有组织地进行存储。

DataBase,简称为DB,下一级是数据表,表中存的是数据。

数据库管理系统:

管理数据库的大型软件。

DataBase Management System,DBMS。

SQL结构化查询语言:

操作关系型数据库的编程语言。

定义操作所有关系型数据库的统一标准。

1.2安装MySQL

建议安装mysql5.5等稳定版,不要安装8.0。并且配置环境变量等,这些有专门的教程,在此就不再赘述。

1.3启动与关闭MySQL服务

打开cmd,键入net start mysql启动数据库,mysql -u用户名 -p密码 -h要访问的ip地址 -P端口,例如:mysql -uroot -p1234 -h127.0.0.1 -P3306

键入net stop mysql即停止mysql服务,exit或quit退出mysql

1.4mysql数据模型

关系型数据库

关系型数据库的建立在关系模型基础上的数据库,简单来说,关系型数据库是由多张能互相连接的二维表组成的数据库。

优点:1.都是表结构,格式一致,易于维护;2.使用通用的SQL语言操作,使用方便,可用于复杂查询;3.数据存储在磁盘中,安全。

语句分类:DDL(操作数据库、表等);DML(对表中数据进行增删改);DQL(对表中数据进行查询);DCL(对数据库进行权限控制)

1.4常用数据库语句

1.4.1DDL-操作数据库

Show DataBases;-- 查看数据库
create database if not exists db1;-- 若不存在db1数据库就创建它
drop database if exists db1;-- 若db1数据库存在就删除它
use db1;-- 启用数据库db1
SELECT DataBase()-- 查看当前在用的数据库

1.4.2DDL-查询表&创建表

use mysql;-- 启用数据库mysql
show tables;-- 查询当前数据库中的所有表
desc func;-- 查询表func
create table tb_user(id int,username varchar(20),password varchar(32));-- 创建表tb_user,包含字段id,username,password,其中id是int类型,username是字符串类型,且其长度不能超过20位

数据类型:

数值型

字符串型

其中的char 与 varchar 都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和

字段值的长度无关 。而varchar是变长字符串,指定的长度为最大占用长度 。相对来说,char是以空间换时间,其性能会更高些。

日期时间型

案例:设计一张学生表,字段如下,请注重数据类型、长度的合理性等

  1. 编号

  1. 姓名,姓名最长不要超过10个汉字

  1. 性别,因为取值只有两种可能,因此最多一个汉字

  1. 生日,取值为年月日

  1. 入学成绩,小数点后保留两位

  1. 邮件地址,最大长度不超过64

  1. 家庭联系电话,不一定是手机号码,可能出现-等字符

  1. 学生状态(用数字表示,正常,休学,毕业等)

create table student(
    
    id int,
    name varchar(10),
    gender char(1),
    birthday date,
    score double(5,2),
    email varchar(64),
    tel varchar(15),
    states tinyint
);

1.4.3DDL-操作表

修改表

ALTER TABLE 表名 RENAME TO 新的表名;-- 修改表名
ALTER TABLE 表名 ADD 列名 数据类型;-- 添加一列
ALTER TABLE 表名 MODIFY 列名 新数据类型;-- 修改数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;-- 修改列名和数据类型
ALTER TABLE 表名 DROP 列名;-- 删除列字段

请将student表名改为stu,然后添加一列address varchar(50),然后修改address的数据类型,然后修改数据类型,继续修改列名和数据类型,最后删除列。

alter table student rename to stu;-- 修改表名
alter table stu add address varchar(50);-- 添加字段address varchr类型,限制50
alter table stu modify address char(50);-- 修改address数据类型为char(50)
alter table stu change address addr varchar(50);-- 修改列名为address,修改数据类型为varchar(50)
alter table drop addr;-- 删除字段addr

1.4.4DML-增删改表内数据

添加数据

INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...);-- 给指定的列添加数据
INSERT INTO 表名 VALUES(值1,值2,...);-- 给全部列添加数据
INSERT INTO 表名(列名1,列名2,...) VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);-- 给指定列批量添加数据
INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);-- 批量添加数据

修改数据

UPDATE 表名 SET 列名1=值1,列名2=值2,...[WHERE 条件];-- 修改表数据,若不加where,会对指定列的所有数据进行修改
-- 例如将张三的id改为3,性别改为女
UPDATE stu SET id = 3,gender = '女' WHERE name = '张三';

删除数据

DELETE FROM 表名 [WHERE 条件];-- 删除WHERE指定的数据
DELETE FROM 表名;-- 会直接删完表中所有数据,但是会保留表

1.4.5DQL-数据查询

基础查询

SELECT 字段列表 -- 尽量不要用*,因为*不好分辨是哪些字段
FROM 表名列表 
WHERE 条件列表 
GROUP BY 分组字段 
HAVING 分组后条件 
ORDER BY 排序字段 
LIMIT 分页限定;

去除重复记录

SELECT DISTINCT address from stu;-- 查询字段address,但是要去重

起别名

SELECT address AS '地址' from stu;-- 从stu表中查取address并起别名叫'地址'

条件查询

SELECT 列名 FROM 表名 WHERE 条件字句;

条件字句有如下几种:

模糊查询

/*
LIKE关键字可以匹配通配符:_匹配单个字符,%匹配多个字符
*/
-- 查询姓'马'的学员信息
SELECT * FROM stu WHERE `name` LIKE '马%';
-- 查询第二个字是'花'的学员信息
SELECT * FROM stu WHERE `name` LIKE '_花%';
-- 查询名字中包含'德'的学员信息
SELECT * FROM stu WHERE `name` LIKE '%德%';

排序查询

排序方式:ASC(默认)升序排列,DESC降序排列

-- 如果有多个排序条件,当前面的条件值一样时,才会根据第二条件进行排序
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段2 [排序方式2],...;

-- 查询学生信息,按年龄升序排列
SELECT * FROM stu ORDER BY age;
-- 查询学生信息,按数学成绩降序排列
SELECT * FROM stu ORDER BY math DESC;
-- 查询学生信息,按数学成绩降序排列,如果数学成绩一样,再按英语成绩升序排列
SELECT * FROM stu ORDER BY math DESC,english;

聚合函数:将一列数据作为整体,进行纵向计算

常见聚合函数:

聚合函数写法:

SELECT 聚合函数(列名) FROM 表;-- 注意null值不参与聚合计算
-- 1.统计班级一共有多少学生
SELECT COUNT(1) FROM stu;
-- 2.查询数学最高分
SELECT MAX(math) FROM stu;
-- 3.查询数学总分
SELECT SUM(math) FROM stu;
-- 4.查询数学均分
SELECT AVG(math) FROM stu;

分组查询

SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
-- 查询男同学和女同学各自的数学均分
SELECT sex,AVG(math) FROM stu GROUP BY sex;
-- 查询男同学和女同学各自的数学均分,以及各自人数
SELECT sex,AVG(math),COUNT(1) FROM stu GROUP BY sex;
-- 查询男生和女生各自的数学均分,以及各自人数,要求:分数低于70分的不参与分组
SELECT sex,AVG(math),COUNT(1) FROM stu WHERE math >= 70 GROUP BY sex;
-- 查询男同学和女同学各自的数学均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2
SELECT sex,AVG(math),COUNT(1) FROM stu WHERE math >= 70 GROUP BY sex HAVING COUNT(1) > 2;

注意:执行顺序上,WHERE>聚合函数>HAVING,所以HAVING可以在分组后,过滤聚合函数的结果,但是WHERE不可以。

分页查询

如下图所示,大家在很多网站都见过类似的效果,如京东、百度、淘宝等。分页查询是将数据一页一页的展示给用户看,用 户也可以通过点击查看下一页的数据。

其具体语法如下:

SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;-- 上述语句中的起始索引是从0开始
-- 从0开始查询,查询3条数据
SELECT * FROM stu LIMIT 0,3;
-- 每页显示3条数据,查询第一页数据
SELECT * FROM stu LIMIT 0,3;
-- 每页显示3条数据,查询第二页数据
SELECT * FROM stu LIMIT 3,3;
-- 每页显示3条数据,查询第三页数据
SELECT * FROM stu LIMIT 6,3;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java三部曲(二)JavaWeb 的相关文章

  • 读取文件并获取 key=value 而不使用 java.util.Properties

    我正在构建一个 RMI 游戏 客户端将加载一个包含一些键和值的文件 这些键和值将用于多个不同的对象 它是一个保存游戏文件 但我不能为此使用 java util Properties 它符合规范 我必须读取整个文件并忽略注释行和与某些类不相关
  • 如何在java中压缩/解压tar.gz文件

    谁能告诉我在java中压缩和解压缩tar gzip文件的正确方法我一直在搜索 但我能找到的最多的是zip或gzip 单独 我写了一个包装器公共压缩 http commons apache org compress called jarchi
  • Java - 从配置文件加密/解密用户名和密码

    我们正忙于为客户开发 Java Web 服务 有两种可能的选择 将加密的用户名 密码存储在Web服务客户端上 从配置中读取 文件在客户端 解密并发送 将加密的用户名 密码存储在 Web 服务器上 从配置中读取 Web 服务器上的文件 解密并
  • 重构——套接字中的良好实践——简单的服务器-客户端 Swing 应用程序

    我使用单例和观察者模式编写了一个带有 Swing 接口的简单服务器 客户端程序 每个客户端都连接到服务器并可以发送消息 服务器将其收到的消息转发给其余的客户端 客户端使用 GUI 允许它们随时连接和断开与服务器的连接 该程序运行得很好 因为
  • 在 Tomcat 上部署 Java Web 项目,无需 WAR 或 EAR

    我有一个 Java Web 项目 Struts Spring 在我的本地主机上完美运行 我必须将其部署在我的网站上 但虚拟主机提供的 Tomcat Manager 界面显示 由于安全原因 它无法上传 WAR 文件 当联系技术支持时 我被告知
  • H264 字节流到图像文件

    第一次来这里所以要温柔 我已经在给定的 H 264 字节流上工作了几个星期 一般注意事项 字节流不是来自文件 它是从外部源实时提供给我的 字节流使用 Android 的媒体编解码器进行编码 当将流写入扩展名为 H264的文件时 VLC能够正
  • JBoss AS 5 中的共享库应该放在哪里?

    我是 Jboss 新手 但我有多个 Web 应用程序 每个应用程序都使用 spring hibernate 和其他开源库和 portlet 所以基本上现在每个 war 文件都包含这些 jar 文件 如何将这些 jar 移动到一个公共位置 以
  • 使用 JAXB 编组 LocalDate

    我正在构建一系列链接类 我希望能够将其实例编组到 XML 以便我可以将它们保存到文件中并稍后再次读取它们 目前我使用以下代码作为测试用例 import javax xml bind annotation import javax xml b
  • JAX-WS:有状态 WS 在独立进程中失败

    我在 Tomcat 上部署了一个有状态的 Web 服务 它由工厂服务和主要 API 服务组成 并且工作得很好 工厂服务将 W3CEndpointReference 返回到主 API 实例 客户端使用会话 现在 我尝试将相同的服务作为独立应用
  • 代码编译期间遇到警告消息“使用或覆盖已弃用的 API”

    我编译了我的程序并收到以下错误 我该如何解决呢 Note ClientThreadClients java uses or overrides a deprecated API Note Recompile with Xlint depre
  • BigDecimal 的 JPA @Size 注释

    我该如何使用 SizeMySQL 的注释DECIMAL x y 列 我在用着BigDecimal 但是当我尝试包括 Size max它不起作用 这是我的代码 Size max 7 2 Column name weight private B
  • 通过 JNI 从 Applet 调用 DLL

    我有一个 概念验证 的作品 它跨越了一些不熟悉的领域 我的任务是将 EFTPOS 机器连接到在内联网浏览器中作为小程序运行的应用程序 我暂时忽略了 EFTPOS dll 并用我选择的语言 Delphi 创建了一个简单的 JNI 修饰的 DL
  • 此版本不符合 Google Play 64 位要求,添加库后仍然出现错误

    我正在 Play 商店上传一个视频编辑器应用程序 其中包含带有一些本机代码的库 所以我通过将其添加到 gradle 来使其兼容 64 位 ndk abiFilters armeabi v7a arm64 v8a x86 x86 64 添加了
  • 尝试在空对象引用上调用虚拟方法“java.lang.String org.jsoup.nodes.Element.ownText()”

    我正在使用下面的代码来获取版本名称 from 应用商店通过使用 jsoup 我正在获取详细信息 但它引发了一些异常 我的代码是 public class ForceUpdateAsync extends AsyncTask
  • Netty中连接关闭后重新连接的最佳方法是什么

    简单场景 扩展 SimpleChannelUpstreamHandler 的较低级别的类 A 此类是发送消息和接收响应的主力 系统其他部分可以使用顶级类 B 来发送和接收消息 可以模拟同步和异步 此类创建 ClientBootstrap 设
  • setKeyListener 将覆盖 setInputType 并更改键盘

    大家好 我在两个设备之间遇到问题 在实践中使用InputType和KeyListener我正在操纵一个EditText让它从数字键盘接收逗号和数字 有关更多背景信息 请检查我之前的question https stackoverflow c
  • 当我在 Java 中输入 IP 时无法连接到我的服务器

    好的 我正在尝试学习 Java 客户端 服务器的内容 并且正在浏览教程代码 如下所示 当我将 localhost 更改为我的 IP 时 它会停止工作 请帮忙 编辑 127 0 0 1 似乎也可以工作 但不是我的真实IP Copyright
  • Java:基于 Web 的应用程序中的单例类实例

    我在 Web Application 中有这个 Singleton 类 public class MyDAO private static MyDAO instance private MyDAO public static MyDAO g
  • 编译时在代码中替换Java静态最终值?

    在java中 假设我有以下内容 fileA java class A public static final int SIZE 100 然后在另一个文件中我使用这个值 fileB java import A class b Object t
  • RecyclerView 不调用 onCreateViewHolder 或 onBindView

    没有收到任何错误 所有数据似乎都有效 由于某种原因 没有调用与视图相关的方法 我已确定以下事项 getItemCount 是唯一被调用的适配器方法 并且返回一个正整数值 我知道这将是你们将要查看的区域 构造函数正在被调用 成员变量有效 Pa

随机推荐

  • net::ERR_HTTP2_PROTOCOL_ERROR 200错误

    场景 web端的环境上某一个请求报这个问题了 其他的请求正常 打开f12控制台看到异常net ERR HTTP2 PROTOCOL ERROR 200错误 排查 查看nginx的error log 报是某一个临时文件的权限不足 原因是启动n
  • CSVDE导出AD域下指定子OU的Group中所有成员的信息

    CSVDE导出AD域下指定子OU的Group中所有成员的信息 最近搞CSVDE搞的头疼 网上各种乱七八糟的资料 都是东搞一下西搞一下 好不容易找到一篇系统性的介绍使用CSVDE来对AD进行导入导出操作的文章 具体链接 http www co
  • mybatis(六) 处理枚举类型

    处理枚举类型 若想映射枚举类型 Enum 则需要从 EnumTypeHandler 或者 EnumOrdinalTypeHandler 中选一个来使用 比如说我们想存储取近似值时用到的舍入模式 默认情况下 MyBatis 会利用 EnumT
  • python数据清洗的三个常用的处理方式!

    关于python数据处理过程中三个主要的数据清洗说明 分别是缺失值 空格 重复值的数据清洗 这里还是使用pandas来获取excel或者csv的数据源来进行数据处理 若是没有pandas的非标准库需要使用pip的方式安装一下 pip ins
  • 华为OD机试真题-分班-2023年OD统一考试(B卷)

    题目描述 幼儿园两个班的小朋友在排队时混在了一起 每位小朋友都知道自己是否与前面一位小朋友是否同班 请你帮忙把同班的小朋友找出来 小朋友的编号为整数 与前一位小朋友同班用Y表示 不同班用N表示 输入描述 输入为空格分开的小朋友编号和是否同班
  • 深度网络架构的设计技巧<一>:Can CNNs Be More Robust Than Transformers?

    导读 启发于Transformer结构 作者将三种设计引入到CNN中 加强后的CNN取得比ViT更强的鲁棒性 这三种设计 实现简单 仅仅几行代码就能实现高效的CNN结构设计 ArXiv https arxiv org abs 2206 03
  • 数据挖掘的基础

    目录 数据挖掘 一 数据挖掘理解 二 数据准备 1 缺失值处理 2 异常值处理 3 数据偏差的处理 4 数据的标准化 5 特征选择 三 数据建模 1 分类问题 2 聚类问题 3 回归问题 4 关联问题 四 评估模型 1 混淆矩阵与准确率指标
  • C语言删除一个字符串中的多余空格字符

    删除一个字符串中的多余空格字符 使得字符串中的每个单词之间只有一个空格字符 code C C char my delblank char str char newStr char start str while start start st
  • 2021年计算机保研经验帖(真平民)(上交网安、复旦、南大、同济、北航、东南)

    个人背景 中九5 数学辅修 数模省一 组织经历较丰富 干啥啥不行 活动第一名 软著及项目若干 无论文无科研 什么叫学混啊 有强烈的上海和南京倾向 有倾向是好事 但是也不要过于自信 因为各个学校的审核很迷 还是要适当海投保证自己有学上 夏令营
  • (二):Qt信号槽连接及触发原理

    经过 Qt信号槽之 准备阶段 学习 我们知道信号是函数 里面调用了 QMetaObject activate 函数 而对于接收端的槽函数或信号 是通过私有静态函数 qt static metacall 调用元方法 源头是有的 接收端也是有的
  • 【Vue学习笔记6】好用的 Vueuse 工具包

    1 安装Vueuse VueUse 的官方 https vueuse org 的介绍说这是一个 Composition API 的工具集合 适用于 Vue 2 x 或者 Vue 3 x 用起来和 React Hooks 还挺像的 VueUs
  • Altium Designer 13 设计备忘录7——如何让过孔/地孔覆铜全覆盖

    通常在PCB布线布局完成后 都会开始对整块板子进行覆铜 这时可能会出现以下过孔 地孔无法全覆盖的情况 通过菜单栏上的设计 Design 规则 R 找到Plane 选择Polygon Connect Style下 PolygonConnect
  • idea新建文件时没有xml文件的处理办法

    1 大部分人在新建spring项目时 会发现新建项目时没有xml文件的选项 如下图所示 2 此问题是pom文件没有正确引入依赖导致的 可以尝试在pom文件中加入spring依赖尝试一下 在pom文件中加入以下依赖 并且更新maven
  • VS编译OpenCV3

    目录 流程 源码 环境 编译完成库 流程文档转载 防丢 1 下载Cmake 2 下载OpenCV源码 3 编译OpenCV 4 最后一步 VS编译openCV 4 1编译Debug版的openCV 4 2编译Release版的openCV
  • 介绍 Golang Timer(定时器)

    介绍 Golang Timer 定时器 本文介绍Golang Timer 定时器 位于Golang 的time包 常用于衡量代码执行效率 示例 假设一个业务方法需要衡量其执行效率 整个执行时间不能超过60秒 一旦超过发送通知 实现一 pac
  • Flutter生成带图片的二维码

    现在的APP中经常需要用自己的信息生成一个二维码给别人扫 下面就介绍一下Flutter中怎么生成一个带图片的二维码 需要用到的插件qr flutter 首先在 pubspec yaml 文件中添加以下依赖 添加依赖后在 pubspec ya
  • Vc - Qt - 仿照微信聊天窗口 - demov.1.0 初步展示

    项目是开源的 项目所在的github的地址 https github com JLZJMWSY Win32 https github com JLZJMWSY Win32 https github com JLZJMWSY Win32下的Q
  • for循环执行顺序---看一篇就懂了。

    for循环是程序代码中我们使用最多的循环体 当然了while do while也经常使用 其中do while常用于循环体无论判断条件是否正确 都会至少执行一次 for int i 0 i lt 5 i 循环体 执行顺序解抛 执行的顺序如下
  • echarts pie饼图既显示内部又显示外部指示线

    查了echarts 文档 并不能通过简单的配置来实现 原因如下 在单个serie的label中 只能设置一个label 位置可以选择在饼图内部inner 或者饼图外部outer 无法实现同时实现内部 外部显示 想到设置两个serie 让两个
  • Java三部曲(二)JavaWeb

    前言 1 什么是JavaWeb Web 全球广域网 也成为万维网 www 能通过浏览器访问的网站 JavaWeb 用Java开发网站的技术栈 2 本教程的基础框架 网页端 展现数据 HTML 制作页面 CSS 美化页面 JavaScript