栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java第28天总结(数据库第一天总结)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java第28天总结(数据库第一天总结)

1.Stream API 1.1 常见的中间操作 1.1.1 概述

 一个中间操作链,对数据进行处理,一个流可以有0~    N个中间操作
他们每一个都返回新的流,方便下一个进行操作
但是只有一个种终止操作

1.1.2 常见中间操作

filter:对元素进行过滤筛选,不符合的就不要了
distinct:去掉重复元素
skip:跳过多少元素
limit:取最大条数(前几条)
map:对集合中的元素进行遍历并操作
sorted:排序

1.1.3 常见异常

Stream使用之后,必须生成新的流,不能使用原来的stream
所以可以进行链式调用,因为中间操作返回值都是一个新的stream

1.1.4 使用方式
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class _01_Stream {
	public static void main(String[] args) {
		List strings=Arrays.asList("a","b","c","a");
		Stream stream=strings.stream();
		//stream.filter(x->false);
		//Stream使用之后,必须生成新的流,不能使用原来的stream
		//所以可以进行链式调用,因为中间操作返回值都是一个新的stream
		
		
		//x->x.equals("a"): 如果返回false,就不要改数据了,如果返回true,就要这个数据
		//collect(Collectors.toList()):终止操作,把stream转换为集合
		List value=stream.filter(x->x.equals("a")).collect(Collectors.toList());
		System.out.println(value);
		
		
		//skip(2) 跳过两个元素,结果为[c, d]
		stream=strings.stream();
		value=stream.skip(2).collect(Collectors.toList());
		System.out.println(value);
		
		
		List list=Arrays.asList(1000,1200,1100,900,5550);
		Stream stream2=list.stream();
		//涨薪百分之十
		List result=stream2.map(x->x+x/10).collect(Collectors.toList());
		System.out.println(result);		//[1100, 1320, 1210, 990, 6105]
		
		
		stream=strings.stream();
		value=stream.distinct().collect(Collectors.toList());
		System.out.println(value);		//本来是abca,现在结果为[a, b, c]

		
		//limit(2) 前两条 [a, b]
		stream=strings.stream();
		value=stream.limit(2).collect(Collectors.toList());
		System.out.println(value);	
		
		
		stream2=list.stream();
		result=stream2.sorted().collect(Collectors.toList());
		System.out.println(result);		//[900, 1000, 1100, 1200, 5550] 默认升序
		
		stream2=list.stream();
		
		//匿名内部类 更改为降序
		result=stream2.sorted(new Comparator() {
			public int compare(Integer o1, Integer o2) {
				return o2-o1;
			};
		}).collect(Collectors.toList());
		System.out.println(result);		//[5550, 1200, 1100, 1000, 900]
		
		//lambda写法
		stream2=list.stream();
		result=stream2.sorted((x,y)->y-x).collect(Collectors.toList());
		System.out.println(result);		//[5550, 1200, 1100, 1000, 900]
	}
}
1.2 常见的终止操作 1.2.1 概述

一旦执行终止操作,中间操作才会真正执行并且stream也就不能再被使用了

1.2.2 常见终止操作

forEach:遍历
collect:收集器
min,max,count,agerage:计算相关
antMatch 匹配数据,比如是否包含

1.2.3 使用方式
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class _02_Stream {
	public static void main(String[] args) {
		List strings = Arrays.asList("a", "b", "c", "a", "c", "a");
		Stream stream = strings.stream();
		// forEach
		stream.forEach(x -> System.out.println(x));

		stream = strings.stream();
		// 获取条数,这种不如直接调用几个的size方法简单
		long count = stream.count();
		System.out.println(count); // 6
		// 这样很难体现出count的又是,一般需要结合中间操作执行优势更大
		// 统计有多少a
		stream = strings.stream();
		count = stream.filter(x -> x.equals("a")).count();
		System.out.println(count); // 3

		// 获取最大值max
		List integers = Arrays.asList(1, 2, 3, 4, 5);
		Stream stream2 = integers.stream();
		Integer i1 = stream2.max((x, y) -> x - y).get();
		System.out.println(i1); // 5

		// 匹配数据 anyMatch
		stream2 = integers.stream();
		boolean flag = stream2.anyMatch(x -> x == 5);
		System.out.println(flag);
		// 上面这种方法,使用集合contains也可以解决,但是也有contains解决不了的问题
		System.out.println(integers.contains(5));

		// 比如好多学生 判断是否有19岁的学生,使用contains的话,Student中就要覆写equals方法
		List students = new ArrayList();
		students.add(new Student("张三1", 19));
		students.add(new Student("张三2", 20));
		students.add(new Student("张三3", 17));
		students.add(new Student("张三4", 16));

		Stream stream3 = students.stream();
		flag = stream3.anyMatch(u -> u.age == 19);
		System.out.println(flag);
	}
}

class Student {
	String name;
	int age;

	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

}
2.数据库 2.1 数据库概述

在操作系统中使用文件进行数据存储,跨平台性能 要差一些,而数据库是可以解决数据跨平台问题

数据库 : 望文知义 就是遵循一定数据格式的数据集合,可以认为是对文件系统的改进 ,解决了操作系统跨平台问题

只要是同一个数据库文件,即使在Windows迁移到linux中 也是可以正常处理的

2.2 数据库分类

 

2.3 关系型和非关系型

关系型数据库 

查询来数据,得到对象,而非关系型数据库,保存键值对 查询处理数据,得到数组

简单理解

而关系型数据库 对于java而言,一个类就可以对应一个表,一个类对象就可以对应表中一行数据,一个成员变量可以对应表中的一个列(字段),能够做到一一的映射,数据库中是以表作为基本单位的

非关系型数据库

是存储键值对的,即有关系型数据库处理数据的方便性,也能处理大量数据,比较火的就是Redis、mongoDB了,各有千秋

关系型数据库这里一个名词是ORM : Object Relationl Mapping 对象关系映射,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了,更加面向对象

3.MySQL 3.1 概述 3.1.1 数据库对象

表,视图,函数,存储过程,索引等。

就是存储数据的,里面有一条条的记录,记录是由字段组成的。每个字段都有自己的字段名、字段值、字段类型(数据类型)。字段是存储数据的基本单元。类似Java中的对象,用于存储数据。

表(table)是一种结构化的文件,可以用来存储特定类型的数据,如:学生信息,课程信息,都可以放到表中。另外表都有特定的名称,而且不能重复。表中具有几个概念:列、行、主键。 列叫做字段(Column),行叫做表中的记录,每一个字段都有:字段名称/字段数据类型/字段约束/字段长度

学生信息表

学号(主键)

姓名

性别

年龄

00001

张三

20

00002

李四

20

视图

我们可以理解为一张虚表(它在物理磁盘上并不真实存在)。视图是基于select语句查询生成的结果集。当一条select语句比较复杂而且调用的频率也比较高时,我们不想再写一遍语句,这时候可以把这条select语句创建为一个视图。每次使用视图的时候,就可以把它当成一张表来用。

函数

通常是一个功能的实现,我们大部分使用的是系统函数(MYSQL提供的),我们也可以自定义函数。它的调用套路通过使用select 函数名(参数1,参数2..);来调用。它只有一个返回值。

存储过程

也是一个功能的实现。我们所说的数据库编程,SQL语句编程,就主要是指自定义一个存储过程。调用存储过程是使用exec 存储过程名 参数1等来调用。它是可以返回多个值,也可以没有返回值。

索引

我们之前接触过,它就像一本书的目录一样,是为了加快我们查询速度而建立的。

3.1.2 表结构

表名称:dept

描述:部门信息表

英文字段名称

中文描述

类型

DEPTNO

部门编号

INT(2)

DNAME

部门名称

VARCHAr(14)

LOC

位置

VARCHAr(13)

表名称:emp

描述:员工信息表

英文字段名称

中文描述

类型

EMPNO

员工编号

INT (4)

ENAME

员工姓名

VARCHAr(10)

JOB

工作岗位

VARCHAr(9)

MGR

上级领导

INT (4)

HIREDATE

入职日期

DATE

SAL

薪水

DOUBLE(7,2)

COMM

津贴

DOUBLE (7,2)

DEPTNO

部门编号

INT(2)

注:DEPTNO字段是外键,DEPTNO的值来源于dept表的主键,起到了约束的作用

表名称:salgrade

描述:薪水等级信息表

英文字段名称

中文描述

类型

GRADE

等级

INT

LOSAL

最低薪水

INT

HISAL

最高薪水

INT

3.1.3 数据类型

整型,浮点型,字符型,日期时间型等。


数值型

时间类型

字符串型 

 3.2 SQL分类

DQL 数据查询
DDL : 数据定义
DML : 数据操作
TCL : 事务机制
DCL : 权限控制

3.2.1 DCL-用户创建和授权

在mysql中,内置一个超级管理员,就是root,在安装的时候已经指定了root的密码

但是在开发的时候,不会让我们使用root用户,这样权限太大,一般都会帮我们创建一个用户,并且我们这个用户只能操作我们相关的数据

-- 创建用户语句
-- CREATE USER '用户名'@'host' IDENTIFIED BY '密码';
CREATE USER 'admin'@'127.0.0.1' IDENTIFIED BY 'root';

-- 授权
-- GRANT 权限 ON 数据库.表 TO '用户名'@'host' IDENTIFIED BY '密码';
-- FLUSH PRIVILEGES 刷新权限
-- 权限 : all privileges 所有权限 select 查询 update 更改 insert 
--  			添加 delete 删除 drop 删除表 create 创建表
GRANT SELECT ON test.student TO 'admin'@'127.0.0.1' IDENTIFIED BY 'root';
FLUSH PRIVILEGES;

-- 撤销授权
-- GRANT 授权  REVOKE撤销授权
-- REVOKE 权限 ON 数据库.表 FROM '用户名'@'host' IDENTIFIED BY '密码';
REVOKE SELECt ON test.student FROM 'admin'@'127.0.0.1' IDENTIFIED BY 'root';

-- 删除用户 DROp
-- DROP USER '用户名'@'host';
DROP USER 'admin'@'127.0.0.1';
3.2.2  DDL-数据库创建和删除
-- 查看当前连接MySQL服务的版本号
SELECT VERSION();
-- 查看当前连接的mysql中所有数据库
SHOW DATAbaseS;
-- 切换到test数据库下
USE test;
-- 查看当前数据库下所有的表
SHOW TABLES;

-- CREATE 创建  DROP 删除
-- USER 用户 DATAbase 数据库	TABLE 表
-- 创建数据库
CREATE DATAbase test01;
-- 删除数据库
DROP DATAbase test01
3.2.3 DDL-表创建和删除
-- 创建day01数据库
CREATE DATAbase day01;
-- 切换到day01数据库下
USE day01;

-- 创建表

CREATE TABLE student_info(
-- id 为整数
id int,
-- name为字符串,长度为20个字符
name VARCHAr(20),
-- score 小数,共5位 其中2位小数3位整数
score DECIMAL(5,2)
);

-- 删除表
DROP TABLE student_info;

-- 查看建表语句
SHOW CREATE TABLE student_info;



CREATE TABLE `table`(
-- id 为整数
id int,
-- name为字符串,长度为20个字符
name VARCHAr(20),
-- score 小数,共5位 其中2位小数3位整数
score DECIMAL(5,2)
);
DROP TABLE `table`;

-- 假如已经有了这个表,Table 'student_info' already exists
-- 可以使用if not EXISTS ,如果存在就不创建,不出案件就不会报错
CREATE TABLE IF NOT EXISTS student_info(
-- id 为整数
id int,
-- name为字符串,长度为20个字符
name VARCHAr(20),
-- score 小数,共5位 其中2位小数3位整数
score DECIMAL(5,2)
);
3.2.4 DML-数据操作

Insert : 添加数据
Update : 更新数据
Delete : 删除数据

3.2.4.1 Insert

-- INSERT 用于向数据库中添加数据
-- 格式:insert into 表名(列名,列名,....) values(值,值,...);
-- 格式:insert into values(值,值,...);
-- 注意:字符串需要加引号,单引号双引号均可
INSERT INTO student(id,name,score) VALUES(1,'张三',80);
INSERT INTO student(id,name) VALUES(2,'李四');

3.2.4.2 Update

-- UPDATE 更改数据
-- 注意 下面这种写法,是整个表的操作,会把表中的数据全部更改
-- 格式:update 表名 set 列名=值,列名=值...;
-- 如果不是全表操作,就必须使用where进行判断
-- 格式:update 表名 set 列名=值,列名=值... where列名=值;
UPDATE student SET score=70.1 WHERe id=2;
-- 所有学生成绩+10分
UPDATE student SET score=score+10;

3.2.4.2 Delete

-- DELETE 删除数据
-- 下面代码,没有使用where,就把表中所有数据都删除
-- 格式:delete from 表名;
-- 只要不是把所有数据都删除,就需要使用where筛选要删除的数据
-- 格式:delete from 表名 where 列名=值;
-- 需求:把所有成绩低于60的删掉
DELETe FROM student WHERe score<60;
-- 需求:把所有没有成绩的删掉 即成绩为null
-- 注意:判断null 不能用=null 应该用is null,同理 判断不为空 用 is not null
DELETe FROM student WHERe score is NULL;

INSERT INTO student(id,name,score) VALUES(3,'小明',50);
INSERT INTO student(id,name) VALUES(4,'小红');
-- 需求:把不及格的删掉 成绩小于60或成绩为null
DELETe FROM student WHERe score<60 OR score is null;
3.2.5 DQL-数据查询
-- SELECt 数据查找
-- 格式:select 列限定 from 表限定 where 行限定
-- 表限定:要查询的那个表
-- 行限定:要查询的数据行
-- 列限定:要查询的数据列
-- 需求:查看所有学生中,及格学生的名字
-- 表限定:学生表  行限定:及格  列限定:学生姓名
SELECt name FROM student WHERe score>60;

-- 需求:查询所有学生信息  *代表所有列
SELECt * FROM student;

-- 需求:查询id为1的学生姓名和成绩
SELECt name,score FROM student WHERe id=1;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/425458.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号