目录
6.foreach遍历getDeclaredMethod()方法的返回值(数组)顺序问题
1. wait()、notify()与notifyAll()。
4.ORA-12514:监听程序当前无法识别链接描述符中请求的服
2.SQL语言(Structured Query Language)
第36天 - - Java高级
一.目标
1.Java高级
2.Java反射技术
二.知识点
1.Java高级
内容:
1.反射技术
2.泛型
3.多线程
4.网络通讯
5.xml
6.log4j
7.注解
8.oracle数据库
9.JDBC
2.Java反射技术
作用:用于在java底层中完成类(描述、加载)的操作
关键字:Class - - 保存类描述
类描述获取方式:
1.类名.class;
2.Class.forName(类地址字符串);
3.对象名.getClass();
3.反射操作成员
类描述提供的成员:
a.属性(方法后面有“s”,则返回数组(所有属性))
Field field = 描述.getField(); //可以获取public属性
Field field = 描述.getDeclaredFiel(); //可以获取所有属性
b.方法(方法后面有“s”,则返回数组(所有属性))
//获得该方法(该方法有多个参数则使用数组)
Method md= 描述.DeclaredMethod("方法名","Class类型");
//调用该方法(如有返回值,则声明引用来指向)
md.invoke("描述的对象","需要传入的值");
c.构造方法
//Class类型:该构造方法参数类型的Class类型(.class)
Constructor c = 描述.getDeclaredConstructor("Class类型");
N.扩展
1.只有一对大括号“{}”
术语:
块
作用:
保存类的描述
2.通过描述获取私有属性
通过描述获取私有属性,且给对象赋值获取的私有属性时,需要开启开关。
语法:
Class c = Class.forName("类地址");
Field field = c.getDeclaredField("属性名");
field.setAccessible(true); //开启私有操作开关
3.参数类型后面有三个点“…”
说明该参数可不写。
4.getReturnType()方法
获得对象的方法返回值类型
6.foreach遍历getDeclaredMethod()方法的返回值(数组)顺序问题
在之前获取过的方法会在遍历的最前面,否则则按顺序执行。
7.反射包(reflect)
java的lang包可以直接访问,但是lang包下的子包需要导入
8.扩展的jar包
点击右键,之后选择build path建立路径
第38天 - - Java高级-线程
一.目标
1.线程
2.多线程编程
3.线程API
二.知识点
1.线程
在java程序中属于一种运行的功能。
2.多线程
在java程序中能同时执行多个不同的功能。
3.线程API
类:Thread
接口:Runnable //最常用的(效率比Thread高)
4.线程方法
start(); //启动线程(底层里面,自动调用run)
sleep(long); //线程休眠
join(); //占用当前CPU资源,等待当前线程执行完毕后再执行其他线程(队列)
yield(); //当前线程让出CPU资源,进入队列末端重新排队(使用详见扩展)
5.线程的生命周期(没有顺序,不能标顺序)
每个程序至少有一个线程,只有一个则为程序本身。
1.新建:新创建了一个线程对象。
2.就绪:线程具备运行所有条件,逻辑上可运行,在等待处理机。
3.运行:线程占用处理机正在运行。
4.阻塞:放弃了cpu使用权,在等待一个事件,逻辑上不可执行。
等待阻塞:O.wait()。JVM把该线程放入等待队列。
同步阻塞:在获取同步锁。若锁被占用,放入锁池中
其他阻塞:sleep()、join()、I\O处理…等
5.死亡:执行结束,或异常退出。
6.作业
请使用线程实现烧水、洗杯子(3个杯子)、泡茶。
N.扩展
1.Thread和Runnable线程的区别?
1.Thread实现方式是通过继承实现,有单继承限制。
2.Runnable属于接口可以通过实现完成,线程可以实现资源共享。
2.线程方法yield()。
1.为静态原生(native)方法
2.只是一个线程从运行状态转到可运行状态(就绪状态)。
重点:大多数情况下该方法可使线程让步,但有可能没效果。
总结:不确定,可能性非常多。
与时间片有关。(多线程并列时,每次执行线程,系统会随机分配时间片(给某线程分配多少时间(ms)来执行代码)
所以,他们还是要抢CPU资源,只是使用了yield方法的线程让出了资源,然后又重新与其他线程开始抢资源(所以说这个方法到底有什么用啊!)
第39天 - - 同步、泛型
一.目标
1.同步
2.泛型
二.知识点
1.同步(synchronized)
作用:
1.用于为多线程编程中提供上锁的功能操作,当一个方法或一个块添加同步后,表示当前部分只能同时有一个线程执行,其他线程进入队列状态。
2.关键字不能被继承。
3.同步加锁的是对象,不是代码。
2.同步实现类型
a.方法同步:public synchronized void xxx(){}
1.如果一个对象有多个synchronized方法,只要一个线程访问了,其他线程不能访问任意一个synchronized方法。
2.不同对象实例的synchronized方法是互不干扰的。
b.块级同步:synchronized (除int任意Object值){};
1.表示只对这个区块资源实行互斥访问。
2.参数为某个类的范围时(如:该synchronized方法的类描述(.class)或类变量),则对该类的所有对象起作用。
3.泛型
关键字:T //可以存放任意的数据类型(最大的类型(可装class、object))
作用:
一般使用在工程架构
泛型只有参数和属性,没有对象
N.扩展
1. wait()、notify()与notifyAll()。
如果需要组合使用该三个方法,锁对象必须为一致的。
lang.Object->wait():等待 - - 线程暂停(线程会进入等待池)
让当前线程进入等待状态(不是调用该方法的对象等待),同时会释放它持有的锁。直至其他线程调用对象(锁)的notify方法唤醒。
lang.Object->notify(): - - 唤醒线程
唤醒单个线程,(随机,由JVM分配)
lang.Object->notifyAll(): - - 全部唤醒
唤醒全部线程。
2.sleep与wait的区别
sleep:属于休眠,拥有自动唤醒的功能,并且线程队列不会改变。
wait:线程暂停,需要通过notify来实现唤醒,并且该方法必须要添加同步。
3.线程池
ThreadLocal:属于API工具类,在Tomcat底层时再详细讲解
4.块级同步中的参数有什么用?(似懂非懂,慢慢来)
1.同步中的加锁是给对象加锁
2.类的同步,如果参数是类的范围时,可以对类的所有对象起作用。
第40天 - - 网络通讯
一.目标
1.网络通讯
2.InetAddress
3.ServerSocket、Socket
二.知识点
1.网络通讯
包括:微信、QQ、网站(聊天、视屏)…
互联网:
www(万维网World Wide Web)
Internet(因特网)
HTTP(超文本传输协议Hyper Text Transport Protocol)
HTML(超文本标记语言HyPer Text Mark-up Language)
网络协议:
TCP/IP协议组:(最重要协议组之一)
TCP:传输控制协议Transimission Control Protocol
IP:互联网协议Internet Protocol
传输层:UDP协议(不稳定,存在丢包)
用户数据包协议:User Datagram Protocol
视屏、语言、聊天…
1.无需建立通讯连接
2.传输速率高、不稳定。
网络层:IP协议
地址协议:
为网络中的计算机提供唯一标识值。
port(端口):计算机中应用程序的唯一标识值。
8080:Tomcat
1433:SQLServer
1521:OracleSql
3306:MySql
…
应用层:HTTP协议
基于TCP(传输控制)协议:
1.必须拥有网络连接,
2.采用请求/响应模式实现数据传输。
3.传输效率低、稳定。
2.InetAddress(地址对象)
方法:
getLocalHost():获得本地地址对象
getHostName(String host):获得指定host地址对象
3.Socket(套接字)
作用:
用于在Java程序中完成应用程序和网卡之间信息传输的工具。
API:
ServerSocket:服务器套接字
Socket:客户端套接字
N.扩展
1.中国互联网创始
网易 丁磊
搜狐 张朝阳
……
2.TCP、UDP区别
UDP:直接发给计算机
TCP:要有连接的建立,与服务器建立连接(请求/响应)
3.网卡
网络通讯中,唯一需操作的硬件。
4.外网、内网、局域网
外网:公网
内网:专网(难以申请,由国家控制)
局域网:(学校内网一般指局域网)
5.C/S与B/S
C/S(客户端/服务器):
B/S(浏览器/服务器):
6.网络OSI七层协议与、TCP/IP协议对应
OSI
1.物理层:电脑各种数据(集线器、中继器,为数据链路提供物理连接)
2.数据链路层:交换机、网桥(建立、管理节点间的链路)
3.网络层:路由器(通过路由器算法,为报文或分组选择适当路径)
4.传输层:各种协议(TCP/IP中的TCP协议、……)
5.会话层:会话管理、会话流量控制
6.表示层:处理用户信息表示(编码、数据格式转换、加密解密等)
7.应用层:电脑各种数据
TCP/IP
1.网络接口层(1、2)
为待传输的数据加入一个以太网协议头,并进行CRC编码,为数据传输做准备
2.网络层(3)
IP协议(对数据加上IP地址确定传输目标)
3.传输层(4)
TCP、UDP协议
4.应用层(5、6、7)
http、ftp、
第41天 - - 网络通讯
一.目标
1.群聊
二.知识点
1.群聊
分析:
1.通过多个客户端连接到服务器实现一个客户端发送信息,其他所有连接到服务器的客户端都能收到信息。
2.必须提供客户端和服务端
3.必须确保客户端一直保持与服务端的连接
实现:
1.服务端获得并保持多个客户端连接。
2.服务端能接受客户端发送、接收的信息。
3.服务端实现信息分发。
N.扩展
1.accept()方法
1.一般用于侦听是否有客户端连接。
2.没有的话会一直停顿在哪儿。(代码不会继续向下执行)
3.有的话,则返回侦听到的套接字(客户端)。
第42天 - - Oracle数据库
一.目标
1.数据库
2.Oracle数据库结构
3.SQL语言
4.PLSQL语言
二.知识点
1.数据库
1.主流数据库:(设计分为:对象、关系)
Oracle(对象、关系)
mysql(关系)
DB2(关系)
SQLServer(关系)
……
//以后发展方向:mangDB(微信小程序),相关技术:(Spring Boot)
2.Oracle:(甲骨文)
1.管理软件:PLSQL
2.SQL语言
3.PLSQL语言(主要为:增、删、改、查)
3.Oracle的三个默认用户:
Sys:sysdba(超级用户)
System:sysoper(操作用户)
Scott:normal(无)
//第一次登陆使用sys(进行相关设置)
//编辑USER->SCOTT,添加create session 授予权限
与其他数据库区别:
必须遵循权限,才能对应的操作数据库。
2.数据库结构
a.用户
b.权限
c.表空间
oracle专属的一种存放数据库的容器。
d.表(分为:行(记录)、列(字段)。字段是属性,记录算是对象(面向对象))
数据库中存放数据的容器。
3.SQL语言(数据库母语)
结构化查询语言(各个数据库有特定的语言)
Oracle:PLSQL
SQLServer:TSQL
4.PLSQL
1.数据库类型
数字类型:number
文本类型:varchar2(长度)-- ''(单引号表示)
var(可变的,弱类型),所以是:可变的字符类型
5.创建数据库表
create table student (
- - 数据库字段命名规范:表命首字母_字段名
s_id number;
s_name varchar2(50),
s_sex varchar(10),
s_age number
)
属性名用逗号分隔,规范:一个属性名单独一行。
varchar2:正确读法(varchar2(two))
结尾不带符号(不用带分号、逗号等)
N.扩展
1.Oracle开启需要遵循的顺序
开启:先监听器,后主服务
关闭:先主服务,后监听器(好像,不知道有什么用)
2.我们设置的Oracle密码
账户:Scott(一般使用普通用户)
密码:abc123
3.数据库表的命名
全大写,或全小写(不要大小写混合)。
自动转化为大写,如果需要小写可以加上“ "" ”双引号(不建议)
4.ORA-12514:监听程序当前无法识别链接描述符中请求的服
解决:(因为虽然配置了监听器,但是没有写入listener.ora文件中)
路径:C:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN
在(SID_LIST = ……)里面,于(SID_DESC = ……)之下
(SID_DESC =
(GLOBAL_DBNAME = orcl)
//根据自己安装目录决定(这句注释请删除)
(ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_1)
(SID_NAME = orcl)
)
重启监听器即可。(感谢:iLife's 博客https://blog.csdn.net/fei1502816)
第43天 - - Oracle数据库
一.目标
1.数据库完整性
2.SQL语句(增删改查)
二.知识点
1.完整性
实现方式:约束
约束结构:
唯一约束:(Unique)
当前字段中的数据必须是不相同。
非空约束:(is not null)
表示当前字段中不能为空数据
例:那个是空:NULL 'NULL' ''
第一个是空
第二个是字段为NULL
第三个表示字符串内容为空
该点有异议,网上资料表明 '',这个Oracle会自动认为是空
检查约束:
check(字段条件)约束
例:(一般在java中就会约束,所以数据库中使用较少)
age字段 年龄必须大于18岁
age check(age>18)
主外键约束:(将会有关联关系)
主键:关系中确定主要数据表(Primary)
外键:关系中确定次要数据表(Foreign)
要素:(约束在没有数据时添加,主外键字段类型必须相同)
1.主键表中主键字段数据在外键表的外键字段上可有、可无、可重复。
(外键可以有、可以没有、可以重复主键数据)
2.外键表中外键字段数据在主键表中主键字段上必须有。
(外键不能有主键没有的数据)
3.删除主键字段中数据必须先删除外键字段数据。
4.外键字段数据可以直接删除。
-------------
1.主键数据为主,外键数据必须是主键所拥有的数据
2.删除主键数据必须先删除其外键数据。
2.SQL语言(Structured Query Language)
结构化查询语言 - - SQL语句
DDL:(Data Definition Language)
数据库定义语言(创建表)
DML:(Data Manipulation Language)
数据库操作语言(增、删、改、查)
DCL:(Data Control Language)
数据库控制语言(授权、提交、回滚)
3.数据库操作
增删改操作必须要提交。(点击绿色按钮,或者代码commit;)
a.增
根据字段名添加对应数据:(最常用)
insert into 表命(字段1,字段2…) values (值1,值2…);
为所有字段插入数据:
insert into 表命values (值1,值2…);
b.删(Oracle中可以还原)
删除表中所有记录:
delete from 表名;
根据条件删除记录:
delete from 表名 where 字段名=值;
c.改
更新表中某个字段所有数据:
update 表命 set 字段名=新值;
根据条件只更新当前满足条件的字段数据:(规范:选择唯一字段)
update 表命 set 字段名=新值 where 字段名=值;
d.查(难点)
1.普通查询
select * from 表名; //“*”表示所有
例:选择查询(“*”位置为:需要得到的数据)
select p_id,p_name from 表名;
2.条件查询
select * from 表名 where 查询条件;
逻辑运算符:
and:与
or:或
not:非
例:
查询内容为空:
select * from product where p_content is null;
不为空:
select * from product where p_content is not null;
大于100万且属于汽车数据:
select * from product where p_price>1000000 and p_type=3;
3.排序查询
a.升序:asc(默认,所以可不写)(ascend)
select * from 表名 order by 字段名 asc;
b.降序:desc(descend)
select * from 表名 order by 字段名 desc;
4.分组查询
5.连接查询
6.子查询(需逻辑、相对难)
4.作业
1.定义
定义一个学员信息表(学号、姓名、年龄、性别、班级、成绩)
一个学员班级表(班级编号、班级名称)
一个学员成绩表(成绩编号、课程名称、课程分数)
2.建立关系
建立3个表的关系
3.添加数据
向表中添加数据5个学生、3个班级、3门课程
4.完善昨天作业
请完善昨天的数据库表设计。
N.扩展
1.类型
Unique:唯一
Primary:主键
Foreign:外键
2.虚拟表与真实表
虚拟表:结果集(result)。查询所得到的数据
真实表:数据库中真实存在的表。
3.“;”分号
1.多条数据一起运行时需要加分号
2.执行一条时可不加。
3.在java程序JDBC编程时不加分号
4.Oracle的注释
/**/ :多行注释
-- :单行注释(再SQL语句后面时有可能会报错,尽量不要写在SQL语句后面)
5.再有数据时修改约束、或修改字段类型
不是不可以,但是会比较麻烦,因为每一个字段都有了约束,修改要按照步骤一步一步来。所以再建立表时,尽量考虑到可能发生的情况。
6.删除语句省略的关键字:from
Oracle的SQL语句中有许多关键字可以省略:
删除:delete form 表名; //form可以省略(查必须要,增、删则不能有)
7.Oracle中数字
数字好像可以无视number或varchar字段类型的设置
例:'6' 与 6 都不会报错
delete student where s_id='6'; //这样也可以执行
第44天 - - Oracle查询
一.目标
1.分组查询
2.连接查询
二.知识点
1.分组查询
通过数据库中表中指定数据进行分组获取(是对分组后的数据操作)
函数:
avg() --平均值
max() --最大值
min() --最小值
count() --统计个数
语法:
select 函数 from 表名 where 查询条件
group by 字段名 having 筛选条件
在使用分组查询的时候,需要分组查询的字段必须包含在group by 中或函数中,否则就会出错。
2.连接查询
类型:
1.自连接查询
当前表以虚拟的形式产生出另外一张,
2.内连接查询(在主外键中)
获得两个或多个表中,公共字段相同的数据
3.外链接查询
类型:
左外链接(加号在右边)
右外链接(加号在左边)
区分主次关系的表示符号:(+)加号在哪边就是次要。
N.扩展
1.分组查询(以后用的比较少)
在查询实体表产生结果集之后,在结果集基础上查询为分组结果集
2.‘as’给字段一个别名。
可省略
3.分组的having关键字开销过大,用的很少。
having作用可替代where。
4.''、'null'、null 哪一个算是空
与SQLServer不同,Oracle 会自动将'' 转化为null,所以字段非空时插入'',则会报错。(varchar2把空串等同于null处理)
5.SQL语句的执行顺序是什么
根据自己简单测试,顺序为:
来自(from)、分组(group)、条件(where)、显示(from与select之间)
6.编写时发现的有趣现象
1.自连接或其他查询,该字段有多条重复数据时,每一条数据都会分开显示。
(就是说会重复多次)
2.自连接时,如果不给每个自己的对象命名(as),不能直接使用表名调用字段。
(会提示未明确定义列)
3.连接查询时,表的左右顺序,根据from编写顺序排列。
4.自、内、外链接(左、右、全连接)查询
每种连接都有多种写法(内、外链接应该是包括自连接的)
内连接:
a.多表查询:
select 条件 from 表1,表2 where 条件;
b.省略inner
select 条件 from 表1 join 表2 on 条件
c.完整
select 条件 from 表1 inner join 表2 on 条件
外链接:
左链接:
a.left join
select 条件 from 表1 left join 表2 on 条件
b.left outer outer
select 条件 from 表1 left outer join 表2 on 条件
c.Oracle特定,使用(+)加号
select 条件 from 表1,表2 where 字段 = 字段(+); (条件)
右连接:
与上同理:right join、right outer join、加号在另一边
全连接:
与以上同理,但是不能使用加号:full join、full outer join
第45天 - - 查询、函数、对象
一.目标
1.查询
多表连接查询
子查询
2.系统函数
日期函数
3.系统对象
序列
二.知识点
1.多表连接查询
a.自连接查询
b.内连接查询
关键字:inner join
c.外链接查询(“+”加号只在oracle使用,其他语法数据库通用)
左外链接查询
关键字:(+)相当于 left outer join
右外链接查询
关键字:(+)相当于 right outer join
全外链接查询
关键字:(没“+”加号)full outer join
2.子查询(嵌套查询)
通过原始数据表,经过多轮的查询而得到的结果集内容,最多能嵌套255层。
子查询可以替代所有的查询方式。
注意事项:
1.使用括号包括查询语句,则可以操作该结果集。(把结果集当做一个表对象)
2.普通子查询返回的结构集只能是一条记录。使用in关键字获得所有。
3.in子查询
该子查询可以返回多条记录。
4.系统函数(其他的多看一下表)
使用系统函数时,在虚拟表dual中输出
日期函数
to_date(字符串1,字符串2)
字符串1:日期数据
字符串2:日期格式
5.序列(sequence)
在Oracle数据库中为字段提供数据自动增长的对象
命名规范:表名_sq
N.扩展
1.字段(列)、记录(行)数据的编辑
加上for update 、rowid语句,则可以点击锁图标。解开锁,则直接编辑数据
例:
select t.*,rowid from 表名 t;
select * from 表名 for update;
第45.5天(自) - Oracle操作符、函数
一.目标
1.SQL操作符
2.函数
二.知识点
1.操作符
1.算数操作符
作用:
执行数值计算。
操作符:
+、-、*、/,等…
例:
select 字段1*(字段2-字段3) from 表名
2.比较操作符
作用:
比较两个表达式的值。
操作符:
=、!=、<、>、<=、>=、BETWEEN…AND…、
IN、LIKE、IS NULL、ANY、ALL,等…
例:
like模糊查找:(模糊值使用“_”下划线替代)
select * from 表名 where 字段1 like '___值';
between在某两个数之间(包括边界值)
select * from 表名 where between 值1 and 值2;
any、in查找多个指定的数据
select * from 表名 where 字段1 = any ('值1','值2');
select * from 表名 where 字段1 in ('值1','值2');
3.逻辑操作符
作用:
用于组合多个运算的结果。
操作符:
and、not、or
4.集合操作符
将两个查询的结果集组合成一个结果集。
intersect:交集,组合两个结果集中有相同的行。
select * from 表1 where 条件 intersect select * from 表2 where 条件
union、union all:并集,将两个结果集所有行组合。(union all:可重复)
minus:差集,第一个结果集排除第二个结果集中的行。
5.连接操作符
||:两个竖线,连接多个字段或字符串。
select 字段1 || 字段2 || '字符串' , 字段3 from 表1;
2.函数
执行特定的操作,带有一个或多个参数,并返回一个值
单行函数:
1.日期函数
sysdate:
关键字,系统时间。
to_date('日期字符','格式'):
指定一个date类型的值
trunc(日期类型,'精度'):
获取随精度的日期(yy:年、mm:月、dd:日、d:当周、q:当季)
(数值类型时:返回参1按精度参2截取后的值。只截取)
round(参1,参2):
与trunc类似,不同:四舍五入。
add_months(日期类型,增加的月份):
增加月份
last_day(日期类型):
该月的最后一天
next_day(日期类型,星期几):
返回日期类型:该类型的下一个星期几的日期。(参2可以为数字)
extract(日期单位 from 日期类型):(参1:year、month、day)
提取年、月、日的值。
2.数字函数
3.字符函数
4.转换函数
5.其他函数
分组函数:
分析函数:
N.扩展
1.操作符的优先级(由高至低)
算数操作符
连接操作符
比较操作符
NOT操作符
AND操作符
OR操作符
2.rownum关键字
序列,缓冲区读取数据,第一条读取的数据为1下一条加1
(如果没有读到则不会加,所以一般由于“<”小于判断)
3.connect by 关键字
当条件满足就会一直执行(查询)。(有点像java的循环)
第46天 - - 数据库设计、JDBC
一.目标
1.了解JDBC
2.掌握JDBC连接技术
二.知识点
1.JDBC
Java DataBase Connection :java数据库连接
通过java程序完成与数据库程序之间的通讯。
方式:增、删、改、查。
各种数据库:连接不一样、sql语法不一样。
JDBC:
1.选择需要连接的DBMS。
选择数据库。
2.获得选择的DBMS供应商所提供的jar包(驱动包)
Oracle自带jar包(无需下载),路径:(LJL本机)
C:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib->ojdbc6.jar
(复制至新建lib文件夹下,后建立路径:右击->build path ->add)
3.java程序加载驱动包,同时加载入口类--反射(Class.forName(驱动地址))。
Class.forName("oracle.jdbc.OracleDriver"); //反射,获取驱动类
4.获得数据库连接对象,传入连接地址、用户名、密码实现java和数据库连接。
Connection con= DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcl",scott,abc123);
(localhost如果为其他地址,则可实现操作该地址的数据库)
5.完成数据库DML操作(两条路)
通过SQL语句编译,实现操作数据库。
5.1:数据库增、删、改
5.1:数据库查询语言
5.1.1:查询后产生结果集
6.响应数据库操作内容到Java程序
7.关闭数据库
2.JDBC连接DML操作
Connection:数据库连接对象
数据库DML操作。
Statement:sql语句编译对象,通过Statement对象编译sql语句。
SQL语句:编译、执行。
增:(java中sal语句如果有“;”分号,则编译无法通过)
//实例化编译对象
Statement stm = Connection的对象.createStatement();
stm.executeUpdate(sql语句); //返回int为影响的行
删
改
查
N.扩展
1.数据库设计的几种模式
ERP:Enterprise Resource planning 企业资源计划
OA:Office AutoMation 自动化办公系统
CRM:Customer Relationship Management 客户关系管理系统
CMS:Content Management System 内容管理系统
SP:
2.数据库的设计规范:3范式
一范式:确保每列的原子性(不可再分割的最小单位)
二范式:一个表只能描述一件事情。
三范式:字段之间,无传递依赖。(除主键外,其他列都不传递,依赖主键列)
3.数据库的三种关系
one to one:一对一
one to many:一对多
many to many:多对多
4.数据库的连接地址
Oracle:(1.如果有两个监听器,则端口号会变动。2.有些地方不区分大小写)
jdbc:oracle:thin:@localhost:1521:orcl
mysql:
jdbc:mysql://localhost:3306/数据库名字
5.加载数据库驱动
JDK 6版本中,JDBC版本为4以上,会自动加载驱动。
所以可以不需要:Class.forName("驱动路径"); //还是写着会好些吧
第47天 - - 删、改、查
一.目标
1.删除、修改
2.查询
3.SQL注入攻击
二.知识点
1.删除、修改(与增一样,只是SQL语句不一样)
//实例化编译对象
Statement stm = Connection对象.createStatement();
stm.executeUpdate(sql语句); //返回影响的行数
2.查询
在jdbc中数据库执行查询语句后,返回一个结果集到应用程序中,java程序就需要对结果集进行接收,通过结果集对象(ResultSet)保存,在遍历结果集对象获取每个字段中的数据。
statement stm = Connection对象.createStatement();
//使用结果集对象接受executeQuery()方法返回的结果集
ResultSet rs = stm.executeQuery(sql语句);
//定义集合,添加获得结果集字段的实体类对象。
ArrayList<实体类> al = new ArrayList<实体类>();
//遍历结果集对象
while(rs.next){ //判断该行还有没有数据(与迭代器类似)
//实例化实体类对象,接受遍历出来的每一条记录
实体类 对象名 = new 实体类();
实体类对象.setXXX(rs.getXXX("字段名")) //XXX:根据实际变化
al.add(对象名);
}
//最后遍历输出集合中的实体类对象
for(实体类 s:al){
System.Out.println( s.getXXX() );
}
3.SQL注入攻击
Statement编译对象:安全性不高,可以注入SQL语法。
PreparedStatement预编译对象:程序会先预编译,防止了SQL语法的注入。
//实例预编译对象,参数为sql语句(sql语句值用“?”问号代替:占位符)
PreParedStatement pstm = Connection对象.prepareStatement(SQL语句);
//设置占位符的值
pstm.setXXX(占位符索引,值); //占位符索引从左至右,从1开始。
ResultSet rs = pstm.executeQuery(); //结果集对象,接收返回的结果集
N.扩展
1.命名规范
实体类与数据库名字一样(首字母大写)
属性名不能有下划线,下划线两边字母大写(规范,根据要求有可能改变)
2.接触的第一个配置文件:properties
因为发布class文件不方便于修改配置信息,所以需要配置文件。
properties后缀文件:(配置文件)
1.键值对关系,左边为键,右边为值。
2.用于数据库连接建立所需的配置信息:驱动路径、链接地址、用户名、密码
Properties类:(util包)
//实例化Properties配置文件对象
properties pt = new Properties();
//通过配置文件对象,来加载配置文件的路径(路径通过类加载器来获得)
pt.load(连接类类名.class.getClassLoader()
.getResourceAsStream("配置文件路径")); //配置文件在src下
//加载路径后,getProperty()方法:可通过键读取配置文件的值
变量 = pt.getProperty("键名");
//最后定义返回类型为Connection类型的静态方法(实现连接对象的复用)
……
3.DBUtil数据库连接工具类
规范:
util包下
作用:
1.通过配置文件对象(Properties)读取配置文件(properties为后缀)
2.通过键获取配置文件值
3.定义静态方法建立数据库连接对象,且返回连接对象(Connection)
第48天 - - 正则表达式
一.目标
1.正则表达式
二.知识点
1.正则表达式
概念:正确的规则表达式。
某种匹配规则的一种字符串。
作用:
用于数据的有效匹配。
2.正则表达式API(java.util.regex包)
Pattern:(模式)
Matcher:(匹配)
3.课堂案例
1.邮编 ^\\d{6}$
2.手机号码 ^[1][3-8]\\d{9}$
3.IP地址 "(((25[0-5])|(2[0-4][0-9])|(1\\d{2})|([1-9]\\d{0,1})).){3}"
+ "((25[0-5])|(2[0-4][0-9])|(1\\d{2})|([1-9]\\d{0,1}))"
(五种情况:250-255、200-249、100-199、10-99、1-9)
4.课后作业
邮箱
省份证号码
N.扩展
1.正则表达式
“[ ]”:就代表占了一位
“.”:如果右边有数字,则可以看做为任意字符
第49天 - - XML、DOM解析器
一.目标
1.了解xml
2.掌握xml解析方式
3.掌握xml读写的操作
二.知识点
1.XML
XML:可扩展 标记 (<>)语言(浏览器可解析)(与HTML都来自W3C)
结构:是一种树形结构(分叉、节点)
作用:
为*.XML(任意文件类型)服务
1.存放配置信息(人为方式存放信息)
标记:
<标记名称 属性="值">主体内容</标记名称>
标记语言:
1.单一标记
在一个标记中没有主体内容的标记
<标记名称 属性="值"/>
2.成对标记
属于一种包含性的标记
<标记名称 属性="值">主体内容</标记名称>
3.头标记(特殊)
<? version="1.0" encoding="UTF-8" ?> //版本现阶段只有1.0
2.编码格式(encoding)
GBK/ GB2312:中文简体
UTF-8:国际语言(支持中文)
ISO-8859-1:国际语言(不支持中文)
3.解析器
1.JAXP
2.DOM(Document Object Model 文档对象模型)(需要学习的)
htnl、xml文档的编程接口规范,和平台无光
3.JDom
只在java,不在界面
4.SAX
非W3C官方所提供的标准,事件驱动,回调
5.Dom4j
是一个JavaXML API,(需要导包)
4.Dom解析器
操作方式:
a.写
b.读
N.扩展
1.XML、HTML
HTML:展示信息
XML:存放配置信息
第50天 - - SAX,DOM4J
一.目标
1.掌握SAX解析器
2.掌握DOM4J解析器
二.知识点
1.SAX解析器
称之为:民间解析器 - - 非官方性的(只有读(只能解析))
原理:事件模型驱动
结构:
文档开始
节点开始
内容
节点结束
文档结束
2.DOM4J解析器
第三方机构编写的框架类解析器。(集成DOM、SAX解析器)
结构:
SAX结构 - - SAXReader
DOM结构 - - DOMReader
步骤:
1.导入dom4j包
N.扩展
1.挂载
例如U盘等,挂载在电脑上。
框架:(从外部引入jar包(ojdbc.jar应该只属于程序))
Dom4J、Log4J
SSM(MyBetis、Spring、SpringMVC)、SpringBoot(微服务端开发)
第51天 - - HTML
一.目标
1.了解HTML
2.掌握HTML开发工具
3.掌握HTML语言
二.知识点
1.HTML
HTML:超文本标记(标签)语言
浏览器:
以内核为主:
1.IE内核
2.火狐内核
3.谷歌内核
4.IOS内核
2.HTML开发工具
记事本、DW、HBuilder
3.HTML
web工程结构:
img: (用于存放网站中需要使用的图片)
css: (存放所有的网页样式文件)
js: (存放所有网页脚本文件)
page: (存放所有网页)
网页结构:
1.头部
<head>
<title> </title> 引用
<link/> 引用
</head>
2.正文
<body>
网页中的内容
</body>
4.常用标签
<br />换行、<hr />水平线、<p></p>段落标签、<h1></h1>…标题标签(6个)
布局:<table></table>(表格)、<div></div>(div)
表单:<fomr></form>(表单)
method属性:
get:
1.通过url方式将数据保存到地址中。(会直接在地址栏显示)
2.以“?”开头,包含name和value。
3.效率高,安全性低。
post:
1.采用包装方式,将数据内容包装到报文中。
2.提交效率低,安全性高
N.扩展
1.HTML
网页:
网页属于美工的设计。
网站:
我们只属于网站的开发。
2.最早的互联网公司
完井
3.属性id和name的区别
id:
属于页面级的标签属性,用于在网页中查找或获得某个组件所需要访问的标签属性
name:
属于服务器端级别的标签属性,用于在浏览器中将标签内容传输到服务器用来获取标签组件内容的访问方式。
4.重点
id和name的区别。
get和post的区别。
第52天 - - div、span、CSS
一.目标
1.div标签
2.span标签
3.CSS
二.知识点
1.div标签
层标签,在网页中用于实现页面模块化标签。
2.span标签
文本标签,用于存放文字内容,并且该标签属于空标签。
3.CSS
样式表
<style></style>
加载方式:
1.内嵌式加载方式
通过style属性设置标签的样式
<标签名 style="样式" />
2.内部式加载方式
通过style属性设置标签样式
<标签名 style="样式" />
3.外部式加载方式
单位:
px:像素。
%:整个屏幕百分比。
选择器:
1.HTML选择器
以标签名作为样式的加载。
标签名称{
样式
}
2.ID选择器
以标签的id属性作为样式的加载
#id名称{
样式
}
3.Class选择器
.样式名{
样式
}
N.扩展
1.ctrl+Shift+i
审查,可以看到该标签的范围。
2.伪类
3.样式选择器优先级
就近原则。
4.标签加上float
自动变为块级元素。
第53天 - - 选择组合器、定位
一.目标
1.组合选择器
2.定位
二.知识点
1.组合选择器
精确定位:(从父级到子级)
选择器 选择器 …{
}
2.定位
absolute:
绝对定位。改变结构,可随意布局。
将对象从文档流中脱出。
relative:
相对定位。改变结构,可随意布局,但是原有位置不会变。
从对象从文档流中脱出,但是对象不可层叠。
fixed:
与absolute相比,只是在可视范围的绝对位置。
z-index属性:(对非绝对定位元素无用)
设置定位层的先后顺序。
3.外部引用
<link rel="stylesheet" href="css/demo.css" />
rel="stylesheet":引用外部样式。
href="路径":引用文件的地址。
4.软件开发流程
1.需求分析:(软件工程师、软件经理、CTO)
与客户打交道。
2.详细设计
3.代码编程(程序员)
4.软件测试
5.部署
N.扩展
1.通过伪类与组合器,控制其它标签的显示
当移动至父标签时,设置子标签显示。
父标签:hover 子标签{
display:block;
}
2.规范
1.必须在bord中将属性初始化(list-style:none;paddin:0;margin:0;)。
2.选择组合器时
标签之间的“ ”空格:获取子标签。
标签之间“,”逗号:所有标签都设置。(类似“&”与)
第54天 - - JavaScript了解
一.目标
1.了解javascript
2.掌握javascript核心结构
3.掌握javascript基本语法
二.知识点
1.JavaScript语言
简称:JS
该脚本属于一种弱类型的语言。
强类型:字母有大小写区分、数据类型有指定区分
弱类型:不区分单引号和双引号。只有一种类型(var类型)
(js是区分大小写的)
2.javascript核心结构
核心:
DOM:文档对象模型。(body内的)
BOM:浏览器对象模型。(body外的都属于(window窗体))
3.基本语法
a.js创建语法(可在<html>标签之内任意位置)
<script>
js脚本
</script>
b.脚本创建语法
所有脚本都由函数所包含。
function 函数名(参数列表){
脚本
}
c.执行脚本
所有的网页脚本都通过事件驱动模型来完成执行。
<标签 onxxx="函数名"/>
可通过<script>标签直接运行
<script>
脚本
<script>
4.基础语法
1.数据类型
var 弱类型(类型由值决定)
2.变量
var 变量=值;
3.运算符
==(地址或值比较) ===(地址、值全比较)全等于
4.条件语句
5.循环语句
for(var i=0);
6.数组
var 数组名=new Array();
5.DOM操作
document对象
方法:
getElementById(id名称); 通过标签id获得标前对象
writer(内容); 将内容输出到界面中
组件对象.innerHTML 以HTML标签解析方式输出
<、>、&、'、"该五个字符会转化ASCII实体
组件对象.innerTEXT 以纯文本方式输出
对innerHTML进行一系列处理。
剔除格式信息(\t、\n…)
ASCII实体转化为对应实体
对标签解析、CSS部分解析
textContent
对innerHTML进行处理。(不剔除格式信息)
不会剔除格式信息(空格等格式会保留)
剔除标签(所以<br/>标签不会生效)
N.扩展
1.模板网站
模板王
2.事件(event)
在HTML中,事件都已on开头。
鼠标、键盘、点击、window、焦点、change
3.扩展
getElementsByName(); 通过名字获取(返回数组)
getElementByTagName(); 通过标签名获取(返回数组)
4.疑问
如果id重名会怎样:
会选择同id最前的一个。
方法(function)重名会怎样:
会选择同方法名最后一个。
获取的文本如何转化为数字:
parseInt(文本);
write方法会清空页面:
在页面加载完成之后,输出流已经输出完毕,再调用则会覆盖之前内容。(且write输出流不会关闭,可以使用document.close()关闭这个流)
第55天 - - js控制css
一.目标
1.案例:跑马灯、全选、反选
2.js实现css控制
二.知识点
1.js实现css控制
控制方式:
对象.style.样式属性="值";
对象.style.cssText="样式:样式值;……"; //会把元素style属性的内容覆盖
对象.className="样式名称"; //改变标签class引用的样式
对象.setAttribute("属性名","改变的值"); //通过方法
N.扩展
1.方法
setTimeOut(方法名,毫秒); 每隔多少时间调用某方法
Math对象:
random(); 0-1的随机小数(包括0)
floor(数值); 取整,排除小数点后的数。
2.获取元素为空
当文档还没加载完成,是无法直接获取文档标签的(因为这个标签还没加载出来)。
3.点击复选框
先改变复选框的checked属性,在调用事件。(初步测试)
4.js通过 对象.style.属性 去获得属性时:
与原有style写法不一样,取消了“-”号,右边首字母变为大写。
例:对象.style.backgroundColor = "red";
5.声明变量时可不加var
则会变为widow成员(全局变量),强烈不推荐。
1.语义不清楚。
2.团队开发时,容易覆盖掉其他作用域内的变量,引发异常。
3.给window对象添加没必要的成员。
第56天 - - BOM
一.目标
1.案例:二级联动下拉菜单
2.BOM对象
二.知识点
1.BOM对象
BOM:浏览器对象模型
核心内置隐式对象:
window
内置对象:
window.alert();
window.setTimeout();
window.location //地址对象
window.Navigator //浏览器对象
window.screen //屏幕对象
window.history //历史对象
表单操作:
onsubmit事件控制表单提交 - - return(如果为false则不跳转)
第57天 - - 注解、JUnit、Log4j
一.目标
1.注解
2.JUnit
3.Log4j
二.知识点
1.注解
注释:
在程序代码中用于描述代码信息的一种体现方式,该信息内容不会被jvm执行
行注释:
//
多行注释:
/*
*
*/
可被jvm虚拟机分析注释:
/**
*
**/
注解:Annotation(以@符号开头)
在程序中为功能代码提供编译或运行的能力,并且可以将其功能交给JVM执行。
实现方式:
1.类的注解
2.属性的注解
3.方法的注解
JavaSE开发注解:
@Override:方法重写的提示
@Deprecated:过时的方法
@SuppressWarning():忽略警告(可在括号之内加忽略的警告信息)
JavaEE开发注解:(需要导包)
@WebServlet
@WebService
@RequestMapping
@Test:表示一个单元测试
……
2.JUnit单元测试
单元:
在java中每个类中都会包含多个不同的单元部分(方法)
单元测试:
方法的独立测试,在web程序中替代了main函数,并且单元测试可以完成分解动作。
过程:(5种注解,程序员测试的东西)
类加载之前(必须以static方式修饰)beforeClass(工程只有一个)
方法执行之前before
方法执行Test(表示一个单元测试,相当于入口)
方法执行之后after
类加载完毕之后(必须以static方式修饰)afterClass(工程只有一个)
3.Log4j
log:日志
作用:用于记录程序在执行过程中所产生的数据或异常信息的保存。
操作步骤:
1.导入jar包
2.添加log4j配置文件
3.通过代码实现日志的记录
N.扩展
1.注解有什么用(浅析)
1.元数据,描述数据的数据,可理解为代码级别的插件。
2.在工具编译、执行、解析时,起到说明、配置的作用。
3.理解注解先要学会反射机制。
2.Log4j有什么用(浅析)
1.可以控制日志信息输出的目的地(控制台、文件、GUI组件等)
2.可以控制输出的格式
3.通过定义日志级别,来控制日志的生成过程。
4.只需通过配置文件灵活配置,而不需修改代码。