SQL

1. 什么是SQL?Structured Query Language:结构化查询语言其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为"方言"
2. SQL通用语法1. SQL 语句可以以单行或多行书写,以分号结尾。2. 可使用空格和缩进来增强语句的可读性。3. MySQL数据库的 SQL 语句不区分大小写,关键字建议使用大写。4. 3种注释* 单行注释:-- 注释内容  或  # 注释内容* 多行注释:/* 注释 */	
3. SQL分类1. DDL(Data Definition Language)数据定义语言:用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter等2. DML(Data Manipulation Language)数据库操作语言:用来对数据库中表的数据进行增删改。关键字:insert,delete,update等3. DQL(Data Query Language)数据查询语言:用来查询数据库中表的记录(数据)。关键字:select,where等4. DCL(Data Control Language)数据控制语言(了解):用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT,REVOKE等

DDL:操作数据库,表

1. 操作数据库:CRUD1. C(Create):创建* 创建数据库:* create database 数据库名称;* 创建数据库,判断不存在,再创建:* create database if not exists 数据库名称;* 创建数据库,并指定字符集* create database 数据库名称 character set 字符集名;* 练习:创建db4数据库,判断是否存在,并制定字符集为gbk* create database if not exists db4 character get gbk;2. R(Retrieve):查询* 查询所有数据库的名称:* show databases;* 查询某个数据库的字符集:查询某个数据库的创建语句* show create database 数据库名称;  3. U(Update):修改* 修改数据库的字符集* alter database 数据库名称 character set 字符集名称;4. D(Delete):删除* 删除数据库* drop database 数据库名称;* 判断数据库存在,存在删除* drop database if exists 数据库名称; 5. 使用数据库* 查询当前正在使用的数据库名称* select database( );* 使用数据库* use 数据库名称;2. 操作表1. C(Create):创建1. 语法:create table 表名(列名1 数据类型1,列名2 数据类型2,...列名n 数据类型n);* 注意:最后一列,不需要加逗号(,)* 数据库类型:1. int:整数类型* age int,2. double:小数类型* score double(5,2)3. date:日期,只包含年月日,yyyy-MM-dd4. datetime:日期,包含年月日时分秒,yyyy-MM-dd HH:mm:ss5. timestamp:世界戳类型,包含年月日时分秒,yyyy-MM-dd HH:mm:ss* 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值6. varchar:字符串* name varchar(20):姓名最大20个字符* zhangsan 8个字符  张三 2个字符* 创建表create table student(id int,name varchar(32),age int,score double(4,1),birthday date,insert_time timestamp);* 复制表* create table 表名 like 被复制的表名;2. R(Retrieve):查询* 查询某个数据库中所有的表名称* show tables;* 查询表结构* desc 表名; 3. U(Update):修改1. 修改表名alter table 表名 rename to 新的表名;2. 修改表的字符集alter table 表名 character set 字符集名称;3. 添加一列alter table 表名 add 列名 数据类型;4. 修改列名称 类型alter table 表名 change 列名 新列名 新数据类型;alter table 表名 modify 列名 新数据类型;5. 删除列alter table 表名 drop 列名;4. D(Delete):删除* drop table 表名;* drop table if exists 表名;

DML:增删改表中数据

1. 添加数据:* 语法:* insert into 表名(列名1,列名2,...... 列名n) values(值1,值2,...  值n);* 注意:1. 列名和值要一一对应。2. 如果表名后,不定义列名,则默认给所有列添加值 	insert into 表名 values(值1,值2,...  值n);3. 除了数据类型,其他类型需要使用引号(单双都可以)引起来
2. 删除数据:* 语法:* delete from 表名 [where 条件]* 注意:1. 如果不加条件,则删除表中所有记录。2. 如果要删除所有记录1. delete from 表名;--不推荐使用。有多少条记录就会执行多少次删除操作2. TRUNCATE TABLE 表名;--推荐使用,效率更高,先删除表,然后再创建一个一样的表。
3. 修改数据:* 语法:* update 表名 set 列名1 = 值1,列名2 = 值2, .... [where 条件]* 注意:1. 如果不加任何条件,则会将表中所有记录全部修改。

DQL:查询表中的记录

* select * from 表名; 1. 语法:select 字段列表from表名列表where条件列表group by分组字段having分组之后的条件order by排序limit分页限定
2. 基础查询1. 多个字段的查询select 字段名1,字段名2,... from 表名;* 注意:* 如果查询所有字段,则可以使用*来替代字段列表。 2. 去除重复* distinct 3. 计算列* 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)* ifnull(表达式1,表达式2):null参与的运算,计算结果都为null* 表达式1:哪个字段需要判断是否为null* 如果该字段为null后的替换值4. 起别名* as:as也可以省略3. 条件查询1. where字句后跟条件2. 运算符* >,<,<=,>=,=,<>* select * from student where age>20;--查询年龄大于20 * select * from student where age=20;--查询年龄等于20 * select * from student where age!=20;--查询年龄不等于20* select * from student where age<>20;--查询年龄不等于20  * BETWEEN ... AND* select * from student where age >= 20 && age <= 30;--查询年龄大于等于20 小于等于30* select * from student where age >= 20 and age <= 30;--查询年龄大于等于20 小于等于30* select * from student where age between 20 and 30;;--查询年龄大于等于20 小于等于30* IN(集合)* select * from student where age = 22 or age = 18 or age = 25;--查询年龄22岁18岁25岁的信息* select * from student where age in (22,18,25);--查询年龄22岁18岁25岁的信息* LIKE:模糊查询* 占位符:*  _:单个任意字符* select * from student where name like "_化%";--查询姓名第二个字是化的人* select * from student where name like "___"  --查询姓名是3个字的人* %:多个任意字符* select * from student where name like '马%';--查询姓马的人有哪些* select * from student where name like '%马%';--查询姓名中包含马的人* IS NULL* select * from student where english is null;--查询英语成绩为null* select * from student where english is not null;--查询英语成绩不为null* and 或 &&* or 或 ||* not 或 !	4. DQL:查询语句1. 排序查询* 语法:order by 子句* order by 排序字段1 排序方式1,... 排序字段n 排序方式n;* 排序方式:* ASC:升序,默认的* select * from student order by math;* DESC:降序* select * from student order by math DESC;* 注意:* 如果有多个排序条件,则当前边的条件一样时,才会判断第二条件。* select * from student order by math ASC,english ASC;--按照数学成绩排名,如果数学成绩一样,则按照英语成绩排名2. 聚合函数:将一列数据作为一个整体,进行纵向的计算。1. count:计算个数1. 一般选择非空的列:主键2. count(*)* select count(name) from student;* select count(ifnull(english,0)) from student;--如果以英语成绩来计算人数的话英语成绩中若有null值则人数不够 需要用ifnull来将其统计2. max:计算最大值* select max(math) from student;3. min:计算最小值* select min(math) from student;4. sum:计算和* select sum(math) from student;5. avg:计算平均值* select avg(math) from student;* 注意:聚合函数的计算,排除null值。解决方案:1. 选择不包含非空的列进行计算2. IFNULL函数3. 分组查询1. 语法:group by 分组字段;* select sex,avg(math)  from student group by sex;--按照性别分组,分别查询男,女同学的平均分* select sex,avg(math),count(id)  from student group by sex;--按照性别分组,分别查询男,女同学的平均分,人数* select sex,avg(math),count(id)  from student where math > 70 group by sex;--按照性别分组,分别查询男,女同学的平均分,人数   要求:分数低于70分的人,不参与分组* select sex,avg(math),count(id)  from student where math > 70 group by sex having count(id) > 2;--按照性别分组,分别查询男,女同学的平均分,人数   要求:分数低于70分的人,不参与分组,分组之后,人数要大于2个人2. 注意:1. 分组之后查询的字段:分组字段,聚合函数2. where和having的区别?1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。4. 分页查询1. 语法:limit 开始的索引,每页查询的条数;2. 公式:开始的索引  =  (当前的页码 - 1) * 每页显示的条数;* 每页显示3条记录:* select * from student limit 0,3;--第一页* select * from student limit 3,3;--第二页* select * from student limit 6,3;--第三页3. limit 是一个MySQL"方言"
5. 约束* 概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性。* 分类:1. 主键约束:primary key2. 非空约束:not null3. 唯一约束:unique4. 外键约束:foreign key* 非空约束:not null,某一列的值不能为null1. 创建表时添加约束create table stu{id int,name varchar(20) not null  --name为非空};2. 删除name的非空约束alter table stu modify name varchar(20);3. 创建表完后,添加非空约束alter table stu modify name varchar(20) not null;* 唯一约束:unique,某一列的值不能重复1. 创建表时添加唯一约束create table stu{id int,phone_number varchar(20) unique  --手机号};* 注意:唯一约束可以有null值,2. 删除唯一约束* alter table stu drop index phone_number;3. 在表创建完后,添加唯一约束* alter table stu modify phone_number varchar(20) unique;* 主键约束:primary key 1. 注意:1. 含义:非空且唯一2. 一张表只能有一个字段为主键3. 主键就是表中记录的唯一标识2. 在创建表时添加主键约束create table stu(id int primary key,--给id添加主键约束name varchar(20));2. 删除主键alter table stu drop primary key;3. 创建完表后添加主键alter table stu modify id int primary key;4. 自动增长1. 概念:如果某一列是数值类型,使用 auto_increment 可以来完成值得自动增长2. 在创建表的时,添加主键约束,并且完成主键自增长create table stu{id int primary key auto_increment,  --给id添加主键约束name varchar(20)};3. 删除自动增长alter table stu modify id int;4. 添加自动增长alter table stu modify id int auto_increment;* 外键约束:foreign key1. 在创建表时,可以添加外键* 语法:create table 表名(......外键列constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称));* 	create table employee(id int primary key auto_increment,name varchar(20),age int,dep_id int,--外键对应主表的主键constraint emp_dept_fk foreign key (dep_id) references department(id));2. 删除外键* alter table 表名 drop foreign key 外键名称;* alter table employee drop foreign key emp_dept_fk;3. 创建表之后,添加外键* alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称);* alter table employee add constraint emp_dept_fk foreign key (dep_id) references department(id);4. 级联操作1. 添加级联的操作语法:alter table 表名 add constraint 外键名称foreign key (外键字段名称) references 主表名称(主表列名称) on update cascade on delete cascade;2. 分类1. 级联更新:on update cascade2. 级联删除:on delete cascade6. 多表之间的关系1. 分类:1. 一对一:* 如:人和身份证* 分析:一个人只有一个身份证,一个身份证只能对应一个人2. 一对多(多对一):* 部门和员工* 分析:一个部门有多个员工,一个员工只能对应一个部门3. 多对多:* 如:学生和课程* 分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择2. 实现关系:1. 一对多(多对一):* 如:部门和员工* 实现方式:在多的一方建立外键,指向一的一方的主键。2. 多对多:* 如:学生和课程* 实现方式:多对多关系实现需要借助第三张中间表,中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键3. 一对一:* 如:人和身份证* 实现方式:一对一关系实现,可以在任意一方添加唯一外键	指向另一方的主键
7. 数据库设计范式* 概念:设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。* 分类:1. 第一范式(1NF):每一列都是不可分割的原子数据项* 几个概念:1. 函数依赖:A-->B,如果通过A属性(属性组)的值,可以确定唯一B属性的值。则称B依赖于A例如:学号-->姓名		(学号,课程名称)--> 分数2. 完全函数依赖:A-->B,如果A是一个属性组,则B属性值得确定需要依赖于A属性组中所有的属性值。例如:(学号,课程名称)--> 分数3. 部分函数依赖:A-->B,如果A是一个属性组,则B属性组值得确定只需要依赖于A属性组中某一些值即可。例如:(学号,课程名称)--> 姓名4. 传递函数依赖:A-->B,B-->C,如果通过A属性(属性组)的值,可以确定唯一B属性的值,再通过B属性(属性组)的值可以唯一确定C属性的值,则称C传递函数依赖于A例如:学号-->系名,系名-->系主任5. 码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码例如:该表中码为:(学号,课程名称)* 主属性:码属性组中的所有属性* 非主属性:除过码属性组的属性2. 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖3. 第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

初始数据:
初始数据

第一范式:
第一范式

第二范式:第二范式

第三范式:第三范式

8. 数据库的备份和还原1. 命令行:* 语法:* 备份 :mysqldump -u用户名 -p密码 数据库名称 > 保存的路径* 还原:1. 登录数据库2. 创建数据库3. 使用数据库4. 执行文件 :source 文件路径2. 图形化软件应用

多表&事务

1. 多表查询* 查询语法:select 列名列表from表名列表where...* 笛卡尔积:* 有两个结合A,B,取这两个集合的所有组成情况。* 要完成多表查询,需要消除无用的数据* 多表查询的分类1. 内连接查询:1. 隐式内连接:使用where条件消除无用的数据select t1.name,t1.gender,t2.namefromemp t1,dept t2wheret1.dept_id = t2.id;2. 显式内连接:* 语法:select 字段列表 from 表名1 [inner] join 表名2 on 条件* select * from emp inner join dept on emp.dept_id = dept.id;* select * from emp join dept on emp.dept_id = dept.id;--inner 可以省略 3. 内连接查询:1. 从哪些表中查询数据2. 条件是什么3. 查询哪些字段2. 外连接查询:1. 左外连接:* 语法:select 字段列表 from 表1 left [outer] join 表2 on 条件;* 查询的是左表所有数据以及其交集部分。* 例子:select t1.*,t2.name from emp t1 left join dept t2 on t1.dept_id = t2.id;--查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称2. 右外连接:* 语法:select 字段列表 from 表1 right [outer] join 表2 on 条件;* 查询的是右表所有数据以及其交集部分。* 例子:select t1.*,t2.name from emp t1 right join dept t2 on t1.dept_id = t2.id;3. 子查询	:* 概念:查询中嵌套查询,称嵌套查询为子查询。* 例子:查询工资最高的员工信息方法1:分两步1. 查询最高的工资是多少   9000select MAX(salary) from emp;2. 查询员工信息,并且工资等于9000的select * from emp where emp.salary = 9000;方法2:一条sql就完成这个操作select * from emp where emp.salary  = (select MAX(salary) from emp);* 子查询不同情况1. 子查询的结果是单行单列的:* 子查询可以作为条件,使用运算符去判断。* 例子:查询员工工资小于平均工资的人select * from emp where emp.salary < (select avg(salary) from emp);2. 子查询的结果是多行单列的:* 子查询可以作为条件,使用运算符in来判断* 例子:查询财务部和市场部所有员工信息方法一:select id from dept where name = "财务部" or name = "市场部";select * from emp where dept_id = 3 or dept_id = 2;方法二:子查询select * from emp where dept_id in (select id from dept where name = "财务部" or name = "市场部")3. 子查询的结果是多行多列的:* 子查询可以作为一个虚拟表参与查询* 例子:查询员工入职日期是2011-11-11日之后的员工信息和部门信息方法一:子查询select * from dept t1,(select * from emp where emp.join_date > '2011-11-11') t2where t1.id = t2.dept_id;方法二:普通内连接select * from emp t1,dept t2 where t1.dept_id t2.id and t1.join_date > '2011-11-11';2. 事务1. 事务的基本介绍1. 概念:* 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。2. 操作:1. 开启事务:start transaction;2. 回滚:rollback;3. 提交:commit;3. MySQL数据库中事务默认自动提交* 事务提交的两种方式:* 自动提交:* mysql就是自动提交的* 一条DML(增删改)语句会自动提交一次事务。* 手动提交:* Oracle数据库默认是手动提交事务* 需要先开启事务,再提交* 修改事务的默认提交方式:* 查看事务的默认提交方式:select @@autocommit;-- 1 代表自动提交  0 代表手动提交* 修改默认提交方式:set @@autocommit = 0;2. 事务的四大特征1. 原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。2. 持久性:当事务提交或回滚后,数据库会持久化的保存数据。3. 隔离性:多个事务之间相互独立。4. 一致性:事务操作前后,数据总量不变3. 事务的隔离级别(了解)* 概念:多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。* 存在问题:1. 脏读:一个事务,读取到另一个事务中没有提交的数据2. 不可重复读(虚读):在同一个事务中,两次读取到的数据不一样3. 幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事查询不到自己的修改。* 隔离级别:1. read uncommitted:读未提交* 产生的问题:脏读,不可重复读,幻读2. read committed:读已提交(Oracle默认)* 产生的问题:不可重复读,幻读3. repeatable read:可重复读(MySQL默认)* 产生的问题:幻读4. serializable:串行化* 可以解决所有的问题* 注意:隔离级别从小到大安全性越来越高,但是效率越来越低* 数据库设置隔离级别:* select @@tx_isolation;* 数据库设置隔离级别:* set global transaction isolation level 级别字符串;
3. DCL* SQL分类:1. DDL:操作数据库和表2. DML:增删改表中数据3. DQL:查询表中的数据4. DCL:管理用户,授权* DBA:数据库管理员* DCL:管理用户,授权1. 管理用户1. 添加用户:* 语法:create user '用户名'@'主机名' identified by '密码';* 例子:create user 'zhangsan'@'localhost' identified by '123';2. 删除用户:* 语法:drop user '用户名'@'主机名';* 例子:drop user 'zhangsan'@'localhost' ;3. 修改用户密码:* 语法:update user set password = password('新密码') where user = '用户名';* 语法二:set password for '用户名'@'主机名' = password('新密码');* mysql中忘记了root用户的密码?1. cmd --> net stop mysql 停止mysql服务* 需要管理员运行该cmd2. 使用无验证方式启动mysql服务:mysql --skip-grant-tables3. 打开新的cmd窗口,直接输入mysql命令,敲回车,就可以登录成功4. use mysql;5. update user set password = password('你的新密码') where user = 'root';6. 关闭两个cmd窗口7. 打开任务管理器,手动结束mysqld.exe的进程8. 启动mysql进程9. 使用新密码登录4. 查询用户:-- 1. 切换到mysql数据库use mysql;-- 2. 查询user表select * from user;* 通配符:%表示可以在任意主机使用用户登录数据库2. 权限管理:1. 查询权限--查询权限show grants for '用户名'@'主机名';show grants for 'lisi'@'%';2. 授予权限--授予权限grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';grant select,delete,update on db3.account to 'lisi'@'%';--给张三用户授予所有权限,在任意数据库任意表上grant all on *.* to 'zhangsan'@'localhost';3. 撤销权限--撤销权限:revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';

JDBC

1. JDBC* 概念:Java DataBase Connectivity      Java数据库连接,Java语言操作数据库* JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
2. 快速入门* 步骤:1. 导入驱动jar包  mysql-connector-java-5.1.37-bin.jar1. 复制mysql-connector-java-5.1.37-bin.jar到项目libs目录下2. 右键 --> Add As Library2. 注册驱动3. 获取数据库连接对象 Connection4. 定义sql5. 获取执行sql语句的对象 Statement6. 执行sql,接收返回结果7. 处理结果8. 释放资源* 代码实现://1.导入驱动jar包//2.注册驱动Class.forName("com.mysql.jdbc.Driver");//3.获取数据库连接对象Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");//4.定义sql语句String sql = "update salarygrade set losalary = 6000 where grade = 1";//5.获取执行sql的对象 StatementStatement stmt = conn.createStatement();//6.执行sqlint count = stmt.executeUpdate(sql);//7.处理结果System.out.println(count);//8.释放资源stmt.close();conn.close();
3. 详解各个对象:1. DriverManager:驱动管理对象* 功能:1. 注册驱动:告诉程序该使用哪一个数据库驱动jarstatic void registerDriver(Driver driver):注册与给定的驱动程序 DriverManager。写代码使用:Class.forName("com.mysql.jdbc.Driver");通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块static {try{java.sql.DriverManager.registerDriver(new Driver());} catch(SQLException E) {throw new RuntimeException("Can't register driver!");}}注意:mysql5之后的驱动jar包可以省略注册驱动的步骤。2. 获取数据库连接* 方法:static Connection getConnection(String url, String user, String password) 图建立到给定数据库 URL 的连接。* 参数:* url:指定连接的路径	 * 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称* 例子:jdbc:mysql://localhost:3306/db3* 细节:如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称* user:用户名* password:密码2. Connection:数据库连接对象1. 功能:1. 获取执行sql的对象* Statement createStatement() * PreparedStatement prepareStatement(String sql) 2. 管理事务:* 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务		* 提交事务:commit() * 回滚事务:rollback()3. Statement:执行sql的对象1. 执行sql1. boolean execute(String sql):可以执行任意的sql  了解2. int executeUpdate(String sql):执行DML(insert,update,delete)语句,DDL(create,alter,drop)语句* 返回值:影响的行数,可以通过这个影响行数判断DML语句是否执行成功 返回值>0的则执行成功,反之,则失败。3. ResultSet executeQuery(String sql):执行DQL(select)语句2. 练习:1. dept表 添加一条记录Statement stmt = null;Connection conn = null;try {Class.forName("com.mysql.jdbc.Driver");//2.String sql = "insert into dept values(50,'党务部','西安')";//3conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");//4stmt = conn.createStatement();//5int count = stmt.executeUpdate(sql);//6System.out.println(count);if (count > 0){System.out.println("添加成功!");}else {System.out.println("添加失败!");}} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();}finally {//stmt.close();//避免空指针异常if (stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}2. dept表 修改记录Connection conn = null;Statement stmt = null;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");String sql = "update dept set loc = '安康' where id = 50";stmt = conn.createStatement();int count = stmt.executeUpdate(sql);System.out.println(count);if (count > 0){System.out.println("修改成功!");}else {System.out.println("修改失败!");}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {if (stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}3. dept表 删除一条记录Connection conn = null;Statement stmt = null;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");String sql = "delete from dept where id = 50";stmt = conn.createStatement();int count = stmt.executeUpdate(sql);System.out.println(count);if (count > 0){System.out.println("删除成功!");}else {System.out.println("删除失败!");}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {if (stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}4. ResultSet:结果集对象,封装查询* boolean next():游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true* getXxx():获取数据* Xxx:代表数据类型	如:int getInt()	,	String getString()* 参数:1. int:代表列的编号,从1开始。如:getString(1)2. String:代表列名称。 getDouble("balance")* 注意:* 使用步骤:1. 游标向下移动一行2. 判断是否有数据3. 获取数据* 练习:* 查询emp表的数据将其封装为对象,然后装载集合,返回。1. 定义Emp类2. 定义方法 public List<Emp> findAll(){}3. 实现方法 select * from emp;5. PreparedStatement:执行sql的对象1. SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接,会造成安全性问题1. 输入用户名随便,输入密码:a' or 'a' = 'a 2. 解决sql注入问题:使用PreparedStatement对象来解决3. 预编译sql:参数使用?作为占位符4. 步骤:1. 导入驱动jar包  mysql-connector-java-5.1.37-bin.jar2. 注册驱动3. 获取数据库连接对象 Connection4. 定义sql* 注意:sql的参数使用?作为占位符。5. 获取执行sql语句的对象 PreparedStatement	Connection.prepareStatement(String sql)6. 给?赋值:* 方法:setXxx(参数1,参数2)* 参数1:?的位置编号 从1开始* 参数2:?的值7. 执行sql,接收返回结果,不需要传递sql语8. 处理结果9. 释放资源5. 注意:后期都会使用PreparedStatement来完成增删改查的操作 1. 可以防止SQL注入2. 效率更高4.抽取JDBC工具类:JDBCUtils* 目的:简化书写* 分析:1. 注册驱动也抽取2. 抽取一个方法获取连接对象	* 需求:不想传递参数(麻烦),还得保证工具类的通用性。* 解决:配置文件jdbc.propertiesurl = user = password = * 练习:* 需求:1. 通过键盘录入用户名和密码2. 判断用户是否登录成功* select * from user where username  = " " and password = " ";* 如果这个sql有查询结果,则成功,反之,则失败* 步骤:1. 创建数据库表 usercreate table user(id int primary key auto_increment,username varchar(32),password varchar(32));insert into user values(null,'zhangsan','123');insert into user values(null,lisi,'345');3. 抽取一个方法释放资源		4. JDBC控制事务1. 事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这个步骤要么同时成功,要么同时失败。2. 操作:1. 开启事务2. 提交事务3. 回滚事务3. 使用Connection对象来管理事务* 开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,开启事务* 在执行sql之前开启事务* 提交事务:commit()* 当所有sql都执行完提交事务* 回滚事务:rollback()	* 在catch中回滚事务														

数据库连接池

1. 概念:其实就是一个容器(集合),存放数据库连接的容器当系统初始化好之后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,当用户访问完后,会将连接对象归还给容器。
2. 好处:1. 节约资源2. 用户访问高效3. 实现:1. 标准接口:DataSource	javax.sql包下的* 方法:* 获取连接:getConnection()* 归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了,而是归还连接。2. 一般我们不去实现它,有数据库厂商来实现1. C3P0:数据库连接池技术 2. Druid:数据库连接池实现技术,由阿里巴巴提供的4. C3P0:数据库连接池技术 * 步骤:1. 导入jar包(两个) c3p0-0.9.5.2.jar	mchange-commons-java-0.2.12.jar,不要忘记数据库的驱动包mysql-connector-java-5.1.37-bin.jar2. 定义配置文件:* 名称:c3p0.properties	或者	c3p0-config.xml* 路径:直接将文件放在src目录下即可3. 创建核心对象 数据库连接池对象 ComboPooledDataSource4. 获取连接:getConnection* 注意连接时可能会出现如下图所示问题1. 首先检查mysql服务是否开启2. 再查看c3p0-config.xml文件,注意连接参数中的url* 查看数据库版本方法1. SQL语句:select version();2. 命令行:mysql -V 或 mysql --version
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!-- 主要是检查下面代码中是否添加?&amp;useSSL=false&amp;serverTimezone=UTC -->
<property name="jdbcUrl">jdbc:mysql://localhost:3306/db4?&amp;useSSL=false&amp;serverTimezone=UTC</property>
<property name="user">root</property>
<property name="password">root</property>

在这里插入图片描述

5. Druid:数据库连接池实现技术,由阿里巴巴提供的1.  步骤:1. 导入jar包	druid-1.0.9.jar2. 定义配置文件:* 是properties形式的* 可以叫任意名称,可以放在任意目录下3. 加载配置文件。Properties4. 获取数据库连接池对象:通过工厂类来获取	DruidDataSourceFactory5. 获取连接:getConnection2. 定义工具类1. 定义一个类 JDBCUtils2. 提供静态代码块加载配置文件,初始化连接池对象3. 提供方法1. 获取连接方法:通过数据库连接池获取连接2. 释放资源3. 获取连接池的方法
/*
* Druid连接池的工具类
* */
public class JDBCUtils {//1.定义成员变量 DataSourceprivate static DataSource ds;static {try {//1.加载配置文件Properties pro = new Properties();pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));//2.获取DataSourceds = DruidDataSourceFactory.createDataSource(pro);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}/** 获取连接的方法* */public static Connection getConnection() throws SQLException {return ds.getConnection();}/** 释放资源* */public static void close(Statement stmt,Connection conn){if (stmt!=null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn!=null){try {conn.close();  //归还连接} catch (SQLException e) {e.printStackTrace();}}}public static void close(ResultSet rs, Statement stmt, Connection conn){if (rs!=null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if (stmt!=null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn!=null){try {conn.close();  //归还连接} catch (SQLException e) {e.printStackTrace();}}}/** 获取连接池的方法* */public static DataSource getDataSource(){return ds;}}

Spring JDBC:JDBC Template

* Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
* 步骤:1. 导入jar包2. 创建JDBCTemplate对象。依赖于数据源DataSource* JdbcTemplate template = new JdbcTemplate(ds);3. 调用JdbcTemplate的方法来完成CRUD的操作* update():执行DML语句。增,删,改语句* queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合* 注意:这个方法查询的结果集长度只能是1* queryForList():查询结果将结果集封装为List集合* 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合* query():查询结果,将结果封装为JavaBean对象* query()的参数:RowMapper* 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装* new BeanPropertyRowMapper<类型>(类型.class)* queryForObject:查询结果,将结果封装为对象* 一般用于聚合函数的查询
public class JdbcTemplateDemo2 {//Junit单元测试,可以让方法独立执行//1.获取JDBCTemplate对象private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());/** 1.修改1号数据的salary为10000* */@Testpublic void test1(){/*//1.获取JDBCTemplate对象JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());*///2.定义sqlString sql = "update emp set salary = 10000 where id = 1001";//3.执行sqlint count = template.update(sql);System.out.println(count);}/** 2.添加一条记录* */@Testpublic void test2(){String sql = "insert into emp(id,ename,dept_id) values(?,?,?)";int count = template.update(sql,1015,"郭靖",10);System.out.println(count);}/** 3.删除刚才添加的记录* */@Testpublic void test3(){String sql = "delete from emp where id = ?";int count = template.update(sql, 1015);System.out.println(count);}/** 4.查询id为1001的记录,将其封装为Map集合* 注意:这个方法查询的结果集长度只能是1* */@Testpublic void test4(){String sql = "select * from emp where id = ?";Map<String, Object> map = template.queryForMap(sql, 1001);System.out.println(map);//{id=1001, ename=孙悟空, job_id=4, mgr=1004, joindate=2000-12-17, salary=10000.00, bonus=null, dept_id=20}}/** 5.查询所有记录,将其封装为List* */@Testpublic void test5(){String sql = "select * from emp";List<Map<String, Object>> list = template.queryForList(sql);/*for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}*/for (Map<String, Object> stringObjectMap : list) {System.out.println(stringObjectMap);}}/** 6.查询所有记录,将其封装为Emp对象的List集合* */@Testpublic void test6(){String sql = "select * from emp";List<Emp> list = template.query(sql, new RowMapper<Emp>() {@Overridepublic Emp mapRow(ResultSet rs, int i) throws SQLException {Emp emp = new Emp();int id = rs.getInt("id");String ename = rs.getString("ename");int job_id = rs.getInt("job_id");int mgr = rs.getInt("mgr");Date joindate = rs.getDate("joindate");double salary = rs.getDouble("salary");double bonus = rs.getDouble("bonus");int dept_id = rs.getInt("dept_id");emp.setId(id);emp.setEname(ename);emp.setJob_id(job_id);emp.setMgr(mgr);emp.setJoindate(joindate);emp.setSalary(salary);emp.setBonus(bonus);emp.setDept_id(dept_id);return emp;}});for (Emp emp : list) {System.out.println(emp);}}/** 6.1查询所有记录,将其封装为Emp对象的List集合* */@Testpublic void test6_1(){String sql = "select * from emp";List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));for (Emp emp : list) {System.out.println(emp);}}/** 7.查询总记录数* */@Testpublic void test7(){String sql = "select count(*) from emp";Long total = template.queryForObject(sql, Long.class);System.out.println(total);}}
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 薪火言币:投资虚拟货币怎么提升自我认识?

    在如何投资虚拟货币这个问题上也很看重这句话&#xff0c;那投资虚拟货币&#xff1a;怎么提升自我认识? 认清市场本质 初期阶段一定要把市场想得简单&#xff0c;只有这样&#xff0c;才敢于参与市场。简单为至上原则!市场的本质是什么呢?市场就是一大群人坐在一起做买卖!…...

    2024/2/28 13:34:06
  2. Tomcat的下载和安装

    1、打开Tomcat官网&#xff0c;默认进入官网首页&#xff0c;官网地址为&#xff1a;http://tomcat.apache.org/ 2. 这里我们可以看到Tomcat8的子版本&#xff0c;根据需求进行选择 8.5 还是 8.0 &#xff0c;这里选择 Tomcat8.5 3. 现在该选择下载Tomcat8.5的安装方式了&#…...

    2024/2/28 13:34:04
  3. 2020-09-20战争游戏开发笔记(第三章:布置预加载地图)

    本章更新SuperEngines1.1 链接&#xff1a;下载 提取码&#xff1a;ip1j 链接&#xff1a;项目资源 提取码&#xff1a;v3t9 服务端 1.将地形加载至项目中 2.将地形预制体加载至场景中。 3.创建一个空对象&#xff0c;命名为山体&#xff08;用于存储山体&#xff09;。…...

    2024/2/28 13:34:03
  4. 【xlwt】xlwt合并单元格写入Excel数据

    import xlwt # 建立Excel文件 wb xlwt.Workbook(encodingutf-8) # 添加表名为sheet_1的表 sheet wb.add_sheet(sheet_1) # 合并单元格写入数据 sheet.write_merge(开始行, 结束行, 开始列, 结束列, 写入的内容) # 保存输出Excel wb.save(Excel文件位置/文件名.xls)...

    2024/3/5 18:04:24
  5. JS查看当前页面的url信息

    大家好&#xff0c;都吃了吗&#xff0c;我是Kaiqisan,是一个不善言辞的羞射男孩&#xff0c;这次来盘点一下url各个部分的获取方法。虽然是一条网址&#xff0c;但是&#xff0c;有时候&#xff0c;我们只是需要网址的某一部分(协议信息&#xff0c;域名&#xff0c;路由&…...

    2024/3/29 6:35:48
  6. 在Ubuntu 20.04中安装Pytorch

    Pytorch是现在一种比较流行的深度学习的框架&#xff0c;我们试试在Ubuntu 20.04中安装Pytorch。 安装地址 打开官网&#xff0c;根据自己的电脑配置选择&#xff0c;将会自动生成安装地址&#xff1a; 进行安装 注意&#xff1a; 我们使用Python3, 所使用pip3;有时安装不成…...

    2024/2/28 3:36:11
  7. spring事务源码解析一

    spring事务源码 spring事务的源码&#xff0c;要从EnableTransactionManagement注解拉开序幕 首先&#xff0c;如果我们要使用spring事务&#xff0c;只需要在配置类上添加EnableTransactionManagement注解&#xff0c;并且在业务方法上添加Transactional注解即可(以spring项…...

    2024/2/29 8:44:54
  8. Javaweb异常提示信息统一处理

    Javaweb异常提示信息统一处理参考文章&#xff1a; &#xff08;1&#xff09;Javaweb异常提示信息统一处理 &#xff08;2&#xff09;https://www.cnblogs.com/andy-zhou/p/5317820.html 备忘一下。...

    2024/2/23 1:40:59
  9. 我的第一篇CSDN博客文章!

    学习者-IT -加油&#xff01;...

    2024/2/8 4:10:20
  10. mac版mysql安装后不能启动

    问题&#xff1a; mysql重装后直接启动不了了 解决&#xff1a; 1.cd /usr/local/var/mysql 2.sudo rm *.err && sudo rm *.pid 3.sudo reboot 注意&#xff1a; 执行完上面的三个命令直接重启电脑了&#xff0c;如果你的mysql是开机自启动的就直接运行了&…...

    2024/3/29 13:09:34
  11. Policy Gradient算法

    Policy Gradient算法 数学理论 不像value-based的方法(Q learning, Sarsa)&#xff0c;与其不同的是他要输出的不是action的value&#xff0c;而是具体的那一个action&#xff0c;这样policy gradient就跳过了value这个阶段 value-based输出的不是连续值&#xff0c;然后再选…...

    2024/2/4 12:37:31
  12. 对抗自编码器(AAE)

    对抗自编码器(AAE) 自编码器转换成生成模型 通过两个目标训练&#xff1a;传统的重构误差函数和对抗训练函数—>将AE隐藏层向量表示的聚合后验分布与任意先验分布匹配。训练准则和VAE很像 1、编码器学到将数据分布转换成该先验分布2、解码器学到一个模型&#xff0c;可以将…...

    2024/2/26 21:53:53
  13. Java 变量命名规则及数据类型详解

    Java初学笔记04 标识符 *标识符就是黑色的字体&#xff0c;就是程序员自己命名的单词 *标识符可以标志&#xff0c;类名&#xff0c;变量名&#xff0c;常量名&#xff0c;方法名… 变量的命名规则: 1.由于Java是强类型的编程语言&#xff0c;我们在声明变量的时候&#x…...

    2024/3/25 10:43:20
  14. 浅谈web api安全

    最近&#xff0c;项目迭代过程中&#xff0c;发现了公司的短信服务被用户恶意攻击的案例。我司的业务在国外&#xff0c;短信服务商每条短信的费用略有点小贵&#xff0c;抛砖引玉聊一聊API安全方面的感想。 很多网站都存在类似的问题&#xff0c;接口请求会被竞争对手、黑客等…...

    2024/3/2 1:45:14
  15. 8.Spark内核

    Spark内核 所谓的内核&#xff0c;就是Spark内部核心原理。 一、内核解析的分解 Spark应用的提交Spark内部的通信Spark作业的调度任务的执行spark内存管理 二、 SparkSubmit --本章节讲述job提交应用以后&#xff0c;环境的准备工作。主要包含以下&#xff1a; 1. spark向ya…...

    2024/2/10 0:50:32
  16. 冰眼冷链物流监控平台学习总结

    冰眼冷链流通监控平台基于物联网及大数据实时计算技术&#xff0c;对生鲜冷链流通过程中的仓储、 运输环节中的海量环境信息进行实时监控&#xff0c;该平台由数据采集、数据处理、系统管理、实时报警、 数据报表、风控、运营后台等多个子系统组成。 采用的的主要技术有&…...

    2024/3/26 15:30:04
  17. Android Https的详解

    Https的通信过程 两种加密 加密方式分两种&#xff0c;对称加密和非对称加密。这两种方式都有自己的优劣势&#xff0c; https中这两种方式都采用了。 我们约定S是服务端&#xff0c;C是客户端&#xff0c;客户端需要从服务端获取信息&#xff1b; 对称加密 这种加密方式比较…...

    2024/3/6 13:39:02
  18. 大数据信息资料采集:视频信息采集及评论内容爬取八爪鱼采集规则

    大数据信息资料采集:视频信息采集及评论内容爬取八爪鱼采集规则 数据采集满足多种业务场景&#xff1a;适合产品、运营、销售、数据分析、政府机关、电商从业者、学术研究等多种身份职业。 舆情监控&#xff1a;全方位监测公开信息&#xff0c;抢先获取舆论趋势。 市场分析&a…...

    2024/3/29 6:01:15
  19. 设计模式之美 - 79 | 开源实战二(中):从Unix开源开发学习应对大型复杂项目开发

    这系列相关博客&#xff0c;参考 设计模式之美 设计模式之美 - 79 | 开源实战二&#xff08;中&#xff09;&#xff1a;从Unix开源开发学习应对大型复杂项目开发1. 吹毛求疵般地执行编码规范2.编写高质量的单元测试3.不流于形式的Code Review4.开发未动、文档先行5.持续重构、…...

    2024/2/28 12:50:33
  20. 磁场对于电感路径检测的影响

    卓大大&#xff0c;你好&#xff0c;我想问您一个关于磁场干扰电感检测的问题。 我们想将我们的智能车放在变电站中通过电磁线引导来实现巡轨&#xff0c;从而对变电站的环境进行一些实时的监控。 但我们了解到变电站有强的电磁场&#xff0c;它们会影响电磁巡迹吗&#xff1f…...

    2024/2/10 15:50:55

最新文章

  1. 浅试Kimi

    最近KIMI大模型挺火的&#xff0c;擅长处理中文文本&#xff0c;咱也来试试吧&#xff01; 测试问题&#xff1a; 写一篇800字以上的短片小说&#xff1a;主要故事是以一位上进但其他方面表现平平的大男孩小贱&#xff0c;刚到公司不久&#xff0c;就被一位名叫大弟的女同事看…...

    2024/3/29 23:41:40
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. oracle 19c 打补丁教程

    感谢大家的关注&#xff0c;针对上篇文章分析的19c的补丁包部分这里分享一下之前记录的打补丁手册 希望对大家有帮助&#xff01; oracle patch 大全&#xff08;更新至2024-03&#xff09;-CSDN博客这里是补丁下载地址 oracle 19CRAC打补丁到19.20 本文是简洁版只有步骤和…...

    2024/3/28 20:59:59
  4. 浅谈前端路由原理hash和history

    1、认识前端路由 本质 前端路由的本质&#xff0c;是监听 url 地址或 hash 值的改变&#xff0c;来切换渲染对应的页面组件 前端路由分为两种模式 hash 模式 history 模式 两种模式的对比 2、hash 模式 &#xff08;1&#xff09;hash 定义 hash 模式是一种把前端路由的路…...

    2024/3/29 13:24:44
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/3/29 17:40:09
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/3/28 4:39:34
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/3/28 5:03:31
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/3/28 19:59:46
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/3/28 21:57:52
  10. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/3/29 17:40:03
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/3/29 19:08:41
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/3/28 21:57:50
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/3/29 10:46:22
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/3/29 18:06:05
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/3/28 19:51:36
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/3/28 19:36:32
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/3/29 19:36:32
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/3/29 9:27:12
  19. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/3/29 12:34:40
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/3/28 19:58:12
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/3/28 21:57:45
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/3/29 11:55:06
  23. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/3/29 8:23:18
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/3/29 22:03:47
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57