• java web学习——第一篇


    1、数据库基础知识

    idea连接数据库步骤:https://www.cnblogs.com/Ran-Chen/articles/9646187.html

    1.1数据库概述
    什么是数据库:
    数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。
    什么是数据库管理系统:DBMS
    数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。
    常见的数据库管理系统
    MYSQL :开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。Oracle :收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。
    DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中。
    SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。SyBase :已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。SQLite : 嵌入式的小型数据库,应用在手机端。
    Java相关的数据库:MYSQL,Oracle.
    这里使用MySQL数据库。MySQL中可以有多个数据库,数据库是真正存储数据的地方。
     
    1.2数据库表 student.sql
    数据库中以为组织单位存储数据。
    表类似我们的Java类,每个字段都有对应的数据类型。
    那么用我们熟悉的java程序来与关系型数据对比,就会发现以下对应关系。
    类----------表,类中属性----------表中字段,对象----------记录
     
    1.3表数据
    根据表字段所规定的数据类型,我们可以向其中填入一条条的数据,而表中的每条数据类似类的实例对象。表中的一行一行的信息我们称之为记录。
    表记录与java类对象的对应关系:
    如果mysql服务已经停止,在登录时会出现以下的错误;
    解决方案:计算机--》右击--》管理--》服务--》启动mysql服务就可以了
     
    1.DBMS:数据库管理系统
    DBMS= 管理程序+多个数据库    mysql:c626:部门表,学生表,学生信息表...
    DataBase = 多张表(table),table = 表结构+表记录
    根据表结构定义对应的类:实体类;student:
    name,age,sex----->表结构:定义对应的列名;表记录:张三,18,男
     
    2. 2.1. 什么是SQL:
    结构化查询语言(Structured Query Language)。
    2. 2SQL的作用:
    客户端使用SQL来操作服务器。
    3.sql的分类
    1. DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等; > 创建、删除、修改:库、表结构!!!
    2. DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);> 增、删、改:表记录
    3. DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
    4. DCL(Data Control Language):数据控制语言,用来进行数据库权限的控制。
    4.登录mysql服务端
    --打开dos窗口的方式:从附件中选择运行;window键加R
    -- 注释格式:--加空格
    -- 连接mysql数据库
    mysql -uroot -proot
    mysql -uroot -p 加回车 -- 密码是星号,保证密码安全
    5.-- 属性与数据库的DDL,对数据库,建库,删库,建表,删表,修改数据库字符集,该表名,修改字段
    -- 查询mysql数据库已有的数据库,show databases;展示所有数据库
    -- 创建数据库,create database c1706a;创建数据库c1706A;
    -- 删除数据库,drop database c1706a;
    -- 查看数据库新创建的信息或者默认字符集,show create database c1701a;
    -- 创建数据库是没有设置字符集,set names gbk;
    -- 修改数据库,alter database c1701a default character set utf8;
    -- 选择要使用的数据库,use c1701a;
    -- 查看当前数据库中的表,show tables;
    -- 创建表:创建一个学生表,存储学生信息:id,学生姓名,年龄
    java:int String double  mysql:int varchar(长度可变的字符串), char(长度不可变),double
    create table t_student(id int(11) primary key auto_increment,sname varchar(50),age int(6));
    -- 查看表结构describe t_student;desc t_student;
    -- 删除表drop table t_student;
    修改表:前缀:ALTER TABLE 表名
    表名修改之-添加列: ALTER TABLE 表名 ADD (列名 列类型, 列名 列类型,... );
    修改之-修改列类型(如果被修改的列已存在数据,那么新的类型可能会影响到已存在数据):ALTER TABLE 表名 MODIFY 列名 列类型;
    修改之-修改列名:ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;
    修改之-删除列:ALTER TABLE 表名 DROP 列名;
    修改表名称:ALTER TABLE 原表名 RENAME TO 新表名;
    如果在黑窗口执行命令时,发生了乱码,:set names gbk;
    默认设置的是utf8,黑窗口是gbk;
    -- 以下操作数据DML,只对表中的数据进行增加,修改,删除,查询
    -- 查看表中的数据(查询表中的数据)select * from t_student;
    -- 添加数据库到学生表中
    insert into t_student value(null,"张三",20);
    insert into t_student(sname,age) value("李四",21);
    insert into t_student(sname,age) values("王五",22);
    insert into t_student(sname,age) value("赵六",23),("田七",24),("马八",25);
    insert into t_student(age,sname) values(1,"鲁迅");
    -- 删除数据
    运算符:=、!=、<>、>、<、>=、<=、BETWEEN...AND、IN(...)、IS NULL、NOT、OR(||)、AND(&&)、between... and: >= and <=
    in(..):只要被包含,就是符合条件的
    is null:只要为空,就是符合条件的not:
    is not null不为空就是符合条件的,如果写成not is null则错误;
    or(||),and(&&)
    -- 指定id值删除数据delete from t_student where id=7;
    -- 指定学生名删除delete from t_student where sname='田七';
    -- 删除多个数据,把年龄小于23岁的学生删除delete from t_student where age <23;
    -- 删除表中的所有数据delete from t_student;
    -- 删除id为14,15delete from t_student where id=14 or id=15;
    -- 删除id为9,11,12,1delete from t_student where id in(9,11,12,1);
    --删除表中性别不为null的数据delete from t_student where sex is not null;
    truncate table t_student:先删除表,然后再创建表达到删除数据的目的;不可回滚;
    -- 修改数据:update 表名 set
    update t_student set sname="李四" ,age=21 where sname="张三";
    update t_student set sname="张三" ,age=100 where id=10;
    —————————————————————————————————————————
    -- 数据类型
    -- int 整型 ,int(m),这里边的m宽度,没有实际意义
    -- 注意:建表时,不能使用关键字作为列名
    -- 创建表 t_person
    create table t_person(pid int(11) primary key auto_increment,age int(1),pname varchar(2),pdate date,ptime time,tp timestamp,dt datetime);
    insert into t_person(age) value(1);
    insert into t_person(age) value(123456);
    -- 字符串 varchar(m)
    insert into t_person(pname) value("aa");
    insert into t_person(pname) value("aaa");-- ERROR 1406 (22001): Data too long for column'pname' at row 1
    insert into t_person(pname) value("你好");-- 汉字在数据库中与字符大小一样
    insert into t_person(pname) value("你好吗");
    -- char ,double ,text,longtext,
    -- 字符串最大宽度为255
    -- date yyyy-mm-dd,time hh:mm:ss timestamp yyyy-mm-dd hh:mm:ss datetime
    -- mysql 数据库中时间支持字符串:pdate:date
    ptime:time
    tp:时间戳 dt:datatime
    insert into t_person(pdate,ptime,tp,dt) value("2017-03-03","14:01:01","2017-03-03
    14:01:01","2017-03-03 14:01:01");
    -- TRUNCATE TABLE 表名
    表结构不变,删除时保留表头,id从新自增
    truncate table t_student; --DDL操作
    -- DELETE FROM 表名 [WHERE 条件];
    只是清空表中的数据,id还是继续自增
    -- 查询操作
    -- 查询学生表中的所有数据
    select * from t_student;-- 效率低
    select id,sname,age from t_student;-- 是开发时建议使用这种查询
    -- 查询学生的姓名和id
    select id,sname from t_student;
    -- 加条件
    -- 查询年龄小于23的学生
    select * from t_student where age<23;
    -- 查询学生年龄在21到24之间的学生信息
    select * from t_student where age<24 and age >21;
    -- 查询学生年龄在21到24之间的学生信息,包括21和24岁select * from t_student where age<=24 and age >=21;
    select * from t_student where age between 21 and 24;
    -- 查询年龄不大于23岁的学生
    select * from t_student where age !> 23;-- mysql数据库不支持!> 和!<
    select * from t_student where age<=23;
    -- 查询年龄不是23岁的学生信息
    select * from t_student s where s.age !=23;
    select * from t_student s where s.age <> 23;
    -- and && 连接的条件同时满足,or ||,满足一个查一个
    -- 查询年龄小于21岁,或者年龄大于24
    select * from t_student s where s.age<21 or s.age>24;
    -- 查询id小于8并且姓名为李四的学生
    select * from t_student s where s.id<8 and s.sname='李四';
    -- 可以给表取别名 表名(列名,聚合函数,子查询)as 别名
    -- 查询学生的姓名
    select s.sname from t_student s;
    select t_student.sname from t_student;
    -- t_person(pid,name);
    -- t_student(sid,name);
    select p.name,s.name from t_person p,t_student s;
    -- 查询,别名只在查询时使用
    -- 查询赵六的学生信息
    select * from t_student s where s.sname='赵六';
    -- 别名在删除语句中不能使用
    delete from t_student s where s.sname='赵六';
    -- 给列取别名
    select sname as '姓名',age '年龄' from t_student;
    -- 和并列
    -- 把主键值和年龄相加
    select (id+age) as '和' from t_student;
    -- 查询结果中不显示重复数据select distinct sname ,age from t_student;
    -- in(), 括号中的值,匹配上哪个就查询出来那条数据
    -- in 条件查询,数据有量的限制
    -- 查询符合条件的学生信息,张三,李四,赵六
    select * from t_student s where s.sname in("张三","李四","赵六");
    -- 查询学生姓名不为空的数据
    insert into t_student(age) values(30),(10);
    -- 判空条件
    select * from t_student s where s.sname !=null;-- 不支持null的不等于判断
    select * from t_student s where s.sname is not null;
    not 列名 is null;--->不建议使用
    select * from t_student s where s.sname is null;
    -- 模糊查询
    insert into t_student(sname) values("鲁四迅"),("四五六"),("张三四");
    -- like _ : _代表的是一个字符
    select * from t_student s where s.sname like '_四';
    select * from t_student s where s.sname like '四__';
    select * from t_student s where s.sname like '_四_';
    -- like %: %代表0到多个字符
    select * from t_student s where s.sname like '%四';
    select * from t_student s where s.sname like '四%';
    select * from t_student s where s.sname like '%四%';
    -- 聚合查询
    -- sum(),求和
    -- 查询所有学生的年龄总和
    select sum(s.age) as cc from t_student s;
    -- avg(),求平均数
    -- 查询所有学生的平均年龄
    select avg(s.age) avgage from t_student s;
    -- 查询最大,最小年龄
    select max(s.age) x,min(s.age) n from t_student s;-- count()统计总记录数
    select count(1) from t_student;
    select count(*) from t_student;
    select count(id) from t_student;
    select count(sname) from t_student;
    -- 查询系统当前时间
    -- dual 表 ,伪表,虚表
    select sysdate() from dual;
    select now() from dual;
    select curdate() from dual;
    select current_date();,Thread.currentThread().getName();获取正在执行的线程的名称;
    select curtime() ;
    select 3*3;
    select 3*3 from dual;
    select 3-3;
    -- 向人表中添加时间
    insert into t_person(pdate,ptime,tp,dt)
    value(curdate(),curtime(),sysdate(),now());
    -- 拼接字符串
    select concat("00","aa","bb","cc");
    -- 分页查询(limit 起始行,查询几行)
    -- limit m :m 代表查询的记录的前m条
    select * from t_student limit 5;
    -- limit m,n:一般用于分页m = (page-1)*n -->一页两条数据:n=2; 第三页 :m = (3-1)*2;
    -- m:先从第m条记录开始,不包括该条记录,n代表查询出n条记录
    select * from t_student limit 4,3;
    -- 查询数据每页显示3条记录
    第一页 0,3(page-1)*n
    select * from t_student limit 0,3;
    第二页 3,3(m-1)*n
    select * from t_student limit 3,3;
    第三页 6,3(m-1)*nselect * from t_student limit 6,3;
    第四页9,3(m-1)*n
    select * from t_student limit 9,3;
    第五页12,3(m-1)*n
    select * from t_student limit 12,3;
    -- null是最小的数字
    -- 排序,一般只对数字类型列排序
    -- -order by
    -- 语法 :order by 字段 asc/desc
    -- asc: 顺序,正序。数值:递增,字母:自然顺序(a-z)
    -- 查询所有学生,年龄按升序排序
    select * from t_student order by age ;
    select * from t_student order by age asc ;
    -- desc: 倒序,反序,逆序。数值:递减,字母:自然反序(z-a)
    -- 查询所有学生,年龄按降序排序
    select * from t_student order by age desc ;
    -- 分组 group by 列名
    alter table t_student add sex varchar(20);-- 增加性别列
    -- 统计男女同学数量
    select count(*) from t_student group by sex;
    -- having,从分组后的数据中过滤数据
    select count(*) from t_student group by sex having sex is not null;
    select * from t_student where sex is not null;
    select * from t_student having sex is not null;
     
    -- 数据约束
    -- 默认值 default
    create table t_user(uid int(11) primary key auto_increment,uname varchar(20),sex char(3) default '男');
    insert into t_user(uname) value("李四");
    insert into t_user(uname,sex) value("张三",'女');
    -- 非空 not null
    create table t_user1(uid int(11) primary key auto_increment,uname varchar(20) not null,sex char(3) not null default '男');
    insert into t_user1(uname) value("张三");
    -- Unique :使用唯一约束的字段,插入的值不能重复。insert into t_user1(uname) value("张三");
    delete from t_user1 where uid=2;
    create table t_user1(uid int(11) primary key auto_increment,uname varchar(20) not null unique,sex char(3) not null default '男');
    insert into t_user1(uname) value("张三");
    insert into t_user1(uname) value("张三");
    -- 主键约束:primary key 对一个字段加上主键约束,控制字段的值不能为null,而且必须唯一,不能重复。
    -- primary key :包括两个约束:unique,not null
    -- 设置成主键的字段,一般与业务无关(代理主键)(推荐使用)
    -- 与业务相关的列作为主键列(自然主键)
    -- 组合主键
    --自增长: auto_increment
    -- 设置自增长之后的字段,可以不赋值,默认的自动增长1
    默认约束:default
    唯一约束:unique
    非空约束:not null
    主键约束:primary key
    自增:auto_increment
    -- DDL操作,对表结构,数据库进行的操作
    -- 建库create database 库名
    -- 删库drop 库名
    -- 建表 create table 表名(列名 列类型(宽度),其他列...);
    -- 删表drop table 表名
    -- 改表名alter table t_user1 rename to t_user2;
    rename table t_user2 to t_user1;
    -- 修改字段名称 column(列) column添加,删除,修改列的语法中可以省略
    alter table t_user1 change column uname uname1 varchar(30);
    alter table t_user1 change uname1 uname varchar(20);
    -- 添加列
    alter table t_user1 add column age int(3) default 20;
    alter table t_user1 add column tel varchar(30) first;-- 在第一列位置添加新列
    alter table t_user1 add column address varchar(50) after uname ;-- 在指定列后添加一列
    -- 删除一列
    alter table t_user1 drop tel;
    -- 设计的三大范式
    -- 范式:建表的规则
    -- 建立学生表
    班级t_class(cid,cname), t_stu(sid,sname,cid外键);
    -- 数据库第一范式
    -- 1)业务数据不能都写在表中的一列里边;
    -- 2)列名不能重复
    -- 数据库第二范式
    -- 每张表要有一个其他列依赖的唯一列(主键)
    -- 数据库第三范式
    -- 如果表与表之间存在关联关系,建立外键
    -- 把主键做为另一张表的外键的表成为,主表或父表
    -- 把持有另一张表的主键作为外键列的表成为,从表或子表
    主表
    create table t_class(cid int(11) primary key auto_increment,cname varchar(200));
    在外部添加主键:
    alter table t_class add primary key (cid);
    insert into t_class(cname) value("c1701a"),("c1701b");
    从表
    create table t_stu(sid int(11) primary key auto_increment,sname varchar(200),cid int(11):外键);
    insert into t_stu(sname,cid) value("张三",1),("李四",1),("王五",2),("赵六",2);
    -- 查询所有班级及班级下的学生
    select * fromt_class c ,t_stu swhere c.cid=s.cid;
    -- 外键设置
    create table t_school(scid int(11) primary key auto_increment,name varchar(50),tel varchar(14));
    -- 给班级表添加外键列
    alter table t_class add scid int(11);
    -- 添加外键约束
    alter table t_class add foreign key(scid) references t_school(scid) on delete cascade on update cascade;
    -- 建表时直接加外键约束
    create table t_class(cid int(11) primary key auto_increment,cname varchar(200),scid int(11),foreign key(scid) references t_school(scid) on delete cascade on update cascade);
    create table t_stu(sid int(11) primary key auto_increment,sname varchar(200),cid int(11),foreign key(cid) references t_class(cid) on delete cascade on update cascade);
    -- 查询学校下的所有班级,班级下的所有学生
    select * from t_school sc ,t_class c ,t_stu s where sc.scid=c.scid and c.cid=s.cid;
    -- 班级,学校是主表,学生是子表
    t_school(scid,scname);
    t_class (cid,cname);
    t_stu(sid,sname,scid外键,cid外键);
    insert into t_school(name) value("积云"),("吉利");
    insert into t_class(cname,scid) value("c1701a",1),("c1701b",1),("c1701ajl",2);
    insert into t_stu(sname,cid) value("张三",4),("李四",4),("王五",5);
    -- 删除吉利级联删除吉利的班级和学生
    delete from t_school where scid=1;
    -- 在子表中只是持有主表的主键值作为列,该列成为形式外键;
    -- 内连接查询-- 创建部门,员工表
    create table t_dept(did int(11) primary key auto_increment,dname varchar(50));
    create table t_emp(eid int(11) primary key auto_increment,ename varchar(50),did int(11)-- 形式外键);
    添加主外键以后的数据操作注意事项:
    1.先添加主表再从表
    2.先删除从表再主表
    如何解决直接删除主表即可?设置级联删除:on delete cascade;
    更新:on update cascade;
    练习:
    1.创建一个school表:scid,scname
    2班级表:cid,cname,scid(需要知道班级是哪个学校的)
    3.学生表:sid,sname.cid需要知道学生的所属班级)
    添加删除数据操作;
    alter table t_emp add foreign key(did) references t_dept(did) on delete cascade;
    --增加外键约束
    insert into t_dept(dname) value("技术部"),("市场部"),("人事部");
    insert into t_emp(ename,did) value("张三",1),("李四",2),("王五",3),("王五",4);
    insert into t_emp(ename,did) value("王五11",3);
    部门表:主表
    did 主键,dname
    员工表:从表
    eid,ename,salary
    did:外键
    -- 1)等值连接:方言---------------》查询出的数据都是符合条件的,不符合条件的将不
    会显示;
    -- 查询部门及部门下的所有员工
    select * from t_dept d,t_emp e where d.did = e.did;
    -- 2)inner join 连接表 on 官方
    select * from t_dept d inner join t_emp e on d.did = e.did;
    -- 外连接:左外连接 left outer join on
    左外:会展示左表中的所有数据,不符合条件部分,以null值顶替
    右外:会展示右表中的所有数据,不符合部分,null值顶替
    insert into t_dept(dname) value("UI部");
    -- 查询所有部门,及部门下的员工
    select * from t_dept d left outer join t_emp e on d.did = e.did;
    select * from t_dept d left join t_emp e on d.did = e.did;
    -- 右外连接right outer join on
    -- 查询所有部门,及部门下的员工
    select * from t_emp e right join t_dept d on d.did=e.did;
    -- 添加员工表,不属于任何部门数据
    insert into t_emp(ename) value("鲁迅");
    select * from t_emp e left join t_dept d on d.did=e.did;
    -- mysql不支持全连接查询 full outer join内连接和外连接的区别?
    内连接:只展示符合条件的数据;
    外连接:左外:展示左表中的全部数据,右外:展示右表中的全部数据;
    不符合条件的数据:null代替
    -- 子查询:查询语句的结果是另一个查询的条件,前边的查询语句成为主查询;
    -- 查询年龄最大的学生信息从t_student表中
    select max(age) from t_student;
    select * from t_student where age=(select max(age) from t_student);
    -- 查询员工张三所属部门的信息
    select * from t_dept d where d.did=(select did from t_emp where ename='张三');
     
     
     
     
     
     
    -- (了解)
    -- 存储过程
    delimiter $ -- 声明存储过程的结束符
    create procedure pro_test(in stuid int) begin select * from t_student where id=stuid; end $;
    call pro_test(1);-- 调用存储过程
    -- 带参数的存储过程 输出参数
    create procedure pro_test3(out num1 int)
    begin
    set num1=3;
    end $
    call pro_test3(@num2);
    select @num2; -- 查询会话参数值
    -- 触发器
    -- 当操作了某张表时,希望同时触发一些动作/行为,可以使用触发器完成!
    -- 创建触发器
    create trigger tri_comment_add after insert on tbl_comment for each rowupdate tbl_info set commentNum=commentNum+1 where id=new.infoId;
    -- DCL操作
    -- 创建新用户
    CREATE USER 'a'@'localhost' IDENTIFIED BY '1';
    -- 给用户付权限
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON *.* TO 'a'@'localhost';
    -- 修改用户密码
    SET PASSWORD FOR 'a'@'localhost' = PASSWORD('11');
    -- 删除用户
    DROP USER 'a'@'localhost';
    --备份数据库
    mysqldump -uroot -proot c1706a>d:aaaa.sql
    -- 还原数据库
    mysql -uroot -proot c1701a<d:aaaa.sql
    -- 重点掌握:简单的ddl操作(建库,删库,建表,删除表)
    dml(增删改查,多表(等值查询,左-右外连接))
    linux:
    练习:
    2.2.1公司表t_company(cid,cname,tel,address);
    部门表t_dept(did,dname,dno部门编号,cid外键);
    员工表t_employee(eid,ename,age,eno员工编号,did外键);
    1) 手工添加添加测试数据;
    2) 查询公司及下属部门,以及部门有员工的部门下的所有员工;
    3) Select * from t_company c, t_dept d,t_employee e where c.cid=d.cid and
    d.did=e.did;
    2.2.2公司表t_com (cid,cname,tel,address);
    部门表t_dep (did,dname,dno部门编号);员工表t_emp (eid,ename,age,eno员工编号,did外键,cid外键);
    4) 手工添加添加测试数据;
    5) 查询公司及下属部门,以及部门有员工的部门下的所有员工;
    Select * from t_company c, t_dept d,t_employee e where c.cid=e.cid and d.did=e.did;
    2.2.3商品类型表t_type(tid,tname);
    商品表t_goods(gid,gname,price价格为double双精度类型,tid外键);
    CREATE TABLE `t_type` (`tid` int(11) PRIMARY KEY (`tid`) AUTO_INCREMENT ,`tname` varchar(50) ,);
    CREATE TABLE `t_goods` (`gid` int(11) NOT NULL AUTO_INCREMENT,`gname` varchar(50) DEFAULT NULL,`price` double(10,2) DEFAULT NULL,`tid` int(11) DEFAULT NULL,PRIMARY KEY (`gid`))
    1) 外键设置约束,通过后添加外键约束语句完成;
    alter table t_goods add foreign key(tid) references t_type(tid) on delete cascade on update cascade;
    2) 测试数据数据手工添加;
    3) 查询商品类型下的所有商品;
    select * from t_goods g,t_type t where g.tid=t.tid;
    4) 计算各个商品类型下商品的总价格,并查询商品类型名称;
    select t.tname ,aa.sm from t_type t, (select SUM(g.price) sm,g.tid from t_goods g GROUP BY g.tid) aa where t.tid=aa.tid; select SUM(g.price),t.tname from t_goods g,t_type t where t.tid=g.tid group by t.tname;
    5) 查询任意商品类型的所有商品,按价格降序排序;
    6) select * from t_goods g where g.tid=1 ORDER BY price DESC;
    7) 查询商品价格最贵的商品信息;3、 select * from t_goods g ,t_type t where g.tid=t.tid and g.price=(select max(price) from t_goods);
     
    日积月累
  • 相关阅读:
    Application Error
    war文件
    The connection to adb is down, and a severe error has occured.
    CORS解决跨域访问问题
    实验吧_拐弯抹角(url伪静态)&Forms
    系列文章(一):探究电信诈骗的关键问题与应对策略——By Me
    企业内部安全宣贯:乌云网停摆事件的思考与评论——By Me
    安全需求-建模归类——By Me
    思考在伟大的互联网世界中,我是谁?——By Me in 2016
    去把bilibili的返回顶点锚点扒了下来
  • 原文地址:https://www.cnblogs.com/qiumh/p/12159129.html
Copyright © 2020-2023  润新知