东软JavaWeb实训记-DAY2-Oracle开发+注册页表单验证+用户协议倒数js效果实现
2017-07-12 16:52
741 查看
sql:结构化的查询语句
T-sql:标准结构化查询语句
1.sql的分类
a)DML:数据管理语句
insert、delete、update
统称为 修改操作
executeUpdatemybatise
b)DQL:数据查询语句
select
i)单表查询
ii)多表查询:
可以是 基表 也可以是 视图 或者是查询的结果
1)不同的表之间链接
2)自连接
以上DML和DQL统称为 CRUD
c)DDL:数据定义语言
create
drop
alter
d)TPL(TCL):事务控制语言
commit
rollback
注意:oracle操作中在客户端(plsql)中进行insert 、delete、udpate 必须commit
oracle会对操作的表 自动加锁
团队开发记得commit
e)DCL:数据控制语言
grant:授予用户权限
revoke
:收回用户的权限
2.数据类型:
a)数值类型:number
number(n) :最多存放 n 个整数
number(m,n):最多m个数字 其中 n 个小数
number :最大装载 37 个整数
b)字符类型;
char(n):
varchar2(n):
c)date,datetime: varchar2
'12-7月/2017'
2017-07-12
d)blob,clob 4Gvarchar2
存放图片的地址
3.常用的约束:
主键约束:不能为空 必须唯一 自动添加聚集索引
唯一约束:值必须唯一,可以为nullajax 完成用户名检查
非空约束:该列不能为空
检查约束:check
外键约束:
默认约束:
创建表的时候不添加约束
添加数据 进行 各种 select 查询 如果都能满足要
再通过 alter 添加相应约束
设计软件:完形填空
ooad
4.建表的语法:
5.使用oracle数据库
启动oracle的监听程序
启动操作数据库 服务
6.插入语句
7.删除
建议 把 delete 用 update 修改 状态完成
8.修改
9.查询语句
a)清楚要显示哪些数据放入到 select 后面
b)显示数据的来源(来自哪些表或视图)放在from 的后面 表与表之间以 , 分割
c)搞清楚表与表之间的关联关系,可能两张表没有之间关系,找第三方表放在where 后面 多个关系 以 and 链接
d)是否有其他条件 直接 在where 后 添加 and 链接 即可
10.sql 中的运算符:
a)算术运算符: + :如果一边为null 计算的结果 为 null
nvl(列,值) :检测 列的值是否 为null 如果为null 输出后面的值
b)比较运算符: > >= < <= = != <>
c)特殊的比较运算符 between and 相当于 >= and <= in(值1,值2)
:批量删除 列=值1 or 列=值2
like :模糊查询 % :表示 任意个 任意字符 _ :表示 一个任意字符
自动补全(智能提示):想想百度 Oracle 中的数据 区分大小写
like '_M%' like '____' like '%M_'
d)逻辑运算符:and 运算符的优先级 比 or 高 and or not e) nvl(列,值) upper() lower()
11.视图:虚拟表,其中不存放任何数据,不能进行insert、delete、update操作
和基本的查询用法相同
他就是 一条复杂sql语句的别名,是预编译
create or replace view 视图名称
as
select 语句;
因为 scott 账户没有创建视图的权利
必须使用 sys 对scott用户进行授权
12.触发器:
a)对表进行insert、delete、update操作是自动执行的一组 sql代码
b)分类:
before:在把数据装载到表中以前 执行 太监 替皇帝 尝食品
after :在把数据添加到表中后 在执行
instead of :替代 只能添加到视图
before: 要修改本表中的数据,用before触发器
在插入数据是 生成 用户的编号
after :自己操作完后影响其他表中的数据
c)触发的事件,一个事件只能触发一个
insert delete update
d)两张虚拟的表:
:new :存放的是要添加到表中的数据
:old :存放的是 从表中删除的数据
特点:与触发器操作的表 结构完全相同
只存放一行数据
操作 :new:old
insert 有 无
delete 无
有
update 有 有
必须知道 该项目需要几张表
就是把链接oracle用到的驱动 jar 添加到 path中
实现的sql语句:
/*
*
*/
create table user_info
(
u_id number primary key,--本身不具备自动增长的能力 序列
u_name varchar2(30 char), -- 30 char 表示以字符为单位
u_sex char(1 char) default'男',
u_sal number(10,2),
u_status number(1) default 1
)
insert into user_info(u_id,u_name,u_sex,u_sal)
values(5,'张三','男',5899.345);
commit;
update user_Info set u_tel ='123456'
select * from user_info;
alter table user_info
add(u_tel char(11));--后添加的列必须允许为 null
select * from dept;
select * from emp;
select * from salgrade;
C/S :每一个客户端只有 commit 后 服务器中数据才会改变
--查询所有员工的姓名和部门名称
1)员工的姓名,部门名称
2)员工的姓名 emp 部门名称 dept
3)之间的关系 emp的deptno=dept的deptno
4)无
select
ename,dname
from emp e,dept d
where e.deptno=d.deptno
-- 查询 所有员工的姓名,工资及其所在的等级
1)姓名 ename 工资 sal 等级 grade
2) emp salgrade
3) emp H中 sal 在 salgrade 中losal 和hisal 之间
select
e.ename,e.sal,s.grade
from emp e,salgrade s
where e.sal between s.losal and s.hisal
--查询员工的姓名工资,部门名称 及工资的级别
select
e.ename,e.sal,d.dname,s.grade
from emp e,salgrade s,dept d
where e.deptno=d.deptno and e.sal>=s.losal and e.sal <=s.hisal
select * from emp;
-- 查询 入职时间 早于其 直属经理的员工和经理名称
1)员工和经理名
2)emp m emp e 通过别名的形式实现 左侧菜单
3)m.empno=e.mgr
4) m.hirdate>e.hirdate
select
e.ename e_name,m.ename m_name,e.hiredate e_hiredate
from emp m,emp e
where m.empno=e.mgr and m.hiredate>e.hiredate
select * from emp;
select sal,comm,sal+comm sal from emp;
nvl(列,值) :检测 列的值是否 为null 如果为null 输出后面的值
select sal,comm,nvl(comm,1) from emp;
select sal+nvl(comm,0) sal from emp;
select * from emp where deptno<>30;
select * from emp where deptno!=30;
select * from emp where ename like '%M%' or ename like '%m%'
select * from emp where upper(ename) like '%M%'
select * from emp where lower(ename) like '%m%'
select * from emp where ename like '_A%'
--工资>3000 并且 名第二个字母为M 或者 部门为 20 并且 名第二个字母为M
select * from emp
where (sal>3000 and ename like '_M%') or (deptno=20 and ename like '_M%')
select * from emp
where (sal>3000 or deptno=20) and ename like '_M%'
开发过程中 基本 80% 的错误都是 sql语句造成
create or replace view v_emp_dept
as
select
e.ename,d.dname
from emp e,dept d
where e.deptno=d.deptno
drop view v_emp_dept;
select * from v_emp_dept;
create sequence seq_id;
create table stu_info
(
stu_id number primary key, -- 1 2 3 4
stu_name varchar2(30 char),
stu_tea_id number --学生对应的教师编号
)
create or replace trigger trig_stu_id
before
insert
on stu_info
for each row -- sql语句影响几行 触发器就执行几次
declare
n number; -- 存放表中 主键的最大值 ,
begin
select max(stu_id) into n from stu_info;
if n is null then
n := 0;
end if;
:new.stu_id := n+1;
end;
insert into stu_info(stu_name,stu_tea_id)
values('元芳',1);
--201707001
--201707002
--201708001
create table tea_info
(
tea_id number(9) primary key,
tea_name varchar2(50 char),
tea_sex char(1 char) default '男'
);
alter table tea_info
add(tea_num number default 0)
登录验证:
reg.jsp
用户协议倒计时
T-sql:标准结构化查询语句
1.sql的分类
a)DML:数据管理语句
insert、delete、update
统称为 修改操作
executeUpdatemybatise
b)DQL:数据查询语句
select
i)单表查询
ii)多表查询:
可以是 基表 也可以是 视图 或者是查询的结果
1)不同的表之间链接
2)自连接
以上DML和DQL统称为 CRUD
c)DDL:数据定义语言
create
drop
alter
d)TPL(TCL):事务控制语言
commit
rollback
注意:oracle操作中在客户端(plsql)中进行insert 、delete、udpate 必须commit
oracle会对操作的表 自动加锁
团队开发记得commit
e)DCL:数据控制语言
grant:授予用户权限
revoke
:收回用户的权限
2.数据类型:
a)数值类型:number
number(n) :最多存放 n 个整数
number(m,n):最多m个数字 其中 n 个小数
number :最大装载 37 个整数
b)字符类型;
char(n):
varchar2(n):
c)date,datetime: varchar2
'12-7月/2017'
2017-07-12
d)blob,clob 4Gvarchar2
存放图片的地址
3.常用的约束:
主键约束:不能为空 必须唯一 自动添加聚集索引
唯一约束:值必须唯一,可以为nullajax 完成用户名检查
非空约束:该列不能为空
检查约束:check
外键约束:
默认约束:
创建表的时候不添加约束
添加数据 进行 各种 select 查询 如果都能满足要
再通过 alter 添加相应约束
设计软件:完形填空
ooad
4.建表的语法:
create table 表名 ( 列名 数据类型 特征, 列名 数据类型 特征 )
alter table 表名 操作
5.使用oracle数据库
启动oracle的监听程序
启动操作数据库 服务
6.插入语句
insert into 表名(列名列表)values(值)
7.删除
delete from 表名 where 条件 ;条件 以 主键为主
建议 把 delete 用 update 修改 状态完成
8.修改
update 表名 set 列=值,列=值 where 条件
9.查询语句
a)清楚要显示哪些数据放入到 select 后面
b)显示数据的来源(来自哪些表或视图)放在from 的后面 表与表之间以 , 分割
c)搞清楚表与表之间的关联关系,可能两张表没有之间关系,找第三方表放在where 后面 多个关系 以 and 链接
d)是否有其他条件 直接 在where 后 添加 and 链接 即可
10.sql 中的运算符:
a)算术运算符: + :如果一边为null 计算的结果 为 null
nvl(列,值) :检测 列的值是否 为null 如果为null 输出后面的值
b)比较运算符: > >= < <= = != <>
c)特殊的比较运算符 between and 相当于 >= and <= in(值1,值2)
:批量删除 列=值1 or 列=值2
like :模糊查询 % :表示 任意个 任意字符 _ :表示 一个任意字符
自动补全(智能提示):想想百度 Oracle 中的数据 区分大小写
like '_M%' like '____' like '%M_'
d)逻辑运算符:and 运算符的优先级 比 or 高 and or not e) nvl(列,值) upper() lower()
11.视图:虚拟表,其中不存放任何数据,不能进行insert、delete、update操作
和基本的查询用法相同
他就是 一条复杂sql语句的别名,是预编译
create or replace view 视图名称
as
select 语句;
因为 scott 账户没有创建视图的权利
必须使用 sys 对scott用户进行授权
grant create view to scott; revoke create view from scott;
12.触发器:
a)对表进行insert、delete、update操作是自动执行的一组 sql代码
b)分类:
before:在把数据装载到表中以前 执行 太监 替皇帝 尝食品
after :在把数据添加到表中后 在执行
instead of :替代 只能添加到视图
before: 要修改本表中的数据,用before触发器
在插入数据是 生成 用户的编号
after :自己操作完后影响其他表中的数据
c)触发的事件,一个事件只能触发一个
insert delete update
d)两张虚拟的表:
:new :存放的是要添加到表中的数据
:old :存放的是 从表中删除的数据
特点:与触发器操作的表 结构完全相同
只存放一行数据
操作 :new:old
insert 有 无
delete 无
有
update 有 有
必须知道 该项目需要几张表
就是把链接oracle用到的驱动 jar 添加到 path中
实现的sql语句:
/*
*
*/
create table user_info
(
u_id number primary key,--本身不具备自动增长的能力 序列
u_name varchar2(30 char), -- 30 char 表示以字符为单位
u_sex char(1 char) default'男',
u_sal number(10,2),
u_status number(1) default 1
)
insert into user_info(u_id,u_name,u_sex,u_sal)
values(5,'张三','男',5899.345);
commit;
update user_Info set u_tel ='123456'
select * from user_info;
alter table user_info
add(u_tel char(11));--后添加的列必须允许为 null
select * from dept;
select * from emp;
select * from salgrade;
C/S :每一个客户端只有 commit 后 服务器中数据才会改变
--查询所有员工的姓名和部门名称
1)员工的姓名,部门名称
2)员工的姓名 emp 部门名称 dept
3)之间的关系 emp的deptno=dept的deptno
4)无
select
ename,dname
from emp e,dept d
where e.deptno=d.deptno
-- 查询 所有员工的姓名,工资及其所在的等级
1)姓名 ename 工资 sal 等级 grade
2) emp salgrade
3) emp H中 sal 在 salgrade 中losal 和hisal 之间
select
e.ename,e.sal,s.grade
from emp e,salgrade s
where e.sal between s.losal and s.hisal
--查询员工的姓名工资,部门名称 及工资的级别
select
e.ename,e.sal,d.dname,s.grade
from emp e,salgrade s,dept d
where e.deptno=d.deptno and e.sal>=s.losal and e.sal <=s.hisal
select * from emp;
-- 查询 入职时间 早于其 直属经理的员工和经理名称
1)员工和经理名
2)emp m emp e 通过别名的形式实现 左侧菜单
3)m.empno=e.mgr
4) m.hirdate>e.hirdate
select
e.ename e_name,m.ename m_name,e.hiredate e_hiredate
from emp m,emp e
where m.empno=e.mgr and m.hiredate>e.hiredate
select * from emp;
select sal,comm,sal+comm sal from emp;
nvl(列,值) :检测 列的值是否 为null 如果为null 输出后面的值
select sal,comm,nvl(comm,1) from emp;
select sal+nvl(comm,0) sal from emp;
select * from emp where deptno<>30;
select * from emp where deptno!=30;
select * from emp where ename like '%M%' or ename like '%m%'
select * from emp where upper(ename) like '%M%'
select * from emp where lower(ename) like '%m%'
select * from emp where ename like '_A%'
--工资>3000 并且 名第二个字母为M 或者 部门为 20 并且 名第二个字母为M
select * from emp
where (sal>3000 and ename like '_M%') or (deptno=20 and ename like '_M%')
select * from emp
where (sal>3000 or deptno=20) and ename like '_M%'
开发过程中 基本 80% 的错误都是 sql语句造成
create or replace view v_emp_dept
as
select
e.ename,d.dname
from emp e,dept d
where e.deptno=d.deptno
drop view v_emp_dept;
select * from v_emp_dept;
create sequence seq_id;
create table stu_info
(
stu_id number primary key, -- 1 2 3 4
stu_name varchar2(30 char),
stu_tea_id number --学生对应的教师编号
)
create or replace trigger trig_stu_id
before
insert
on stu_info
for each row -- sql语句影响几行 触发器就执行几次
declare
n number; -- 存放表中 主键的最大值 ,
begin
select max(stu_id) into n from stu_info;
if n is null then
n := 0;
end if;
:new.stu_id := n+1;
end;
insert into stu_info(stu_name,stu_tea_id)
values('元芳',1);
--201707001
--201707002
--201708001
create table tea_info
(
tea_id number(9) primary key,
tea_name varchar2(50 char),
tea_sex char(1 char) default '男'
);
alter table tea_info
add(tea_num number default 0)
用户id自增触发器:
create or replace trigger trig_tea_id before insert on tea_info for each row declare n number(9); begin select max(tea_id) into n from tea_info where substr(tea_id,1,6)=to_char(sysdate,'yyyymm'); if n is null then n := to_number(to_char(sysdate,'yyyymm')||'000'); end if; :new.tea_id := n+1; end trig_tea_id;
create or replace trigger trig_stu_insert_delete after insert or delete on stu_info for each row begin if inserting then update tea_info set tea_num=tea_num+1 where tea_id = :new.stu_tea_id; end if; if deleting then update tea_info set tea_num=tea_num-1 where tea_id = :old.stu_tea_id; end if; end trig_stu_insert_delete; insert into stu_info(stu_name,stu_tea_id) values('老孔',201707001) select * from stu_info; select * from tea_info; insert into tea_info(tea_name) values('太上老君'); -- 如何获取系统时间 201707 select sysdate from dual; to_char() :把一个数据转换为字符 select to_char(sysdate,'yyyymm')||'000' from dual; select max(tea_id) from tea_info where substr(tea_id,1,6)=to_char(sysdate,'yyyymm'); insert into tea_info values(201707001,'张飞飞','女') select substr(tea_id,1,6) from tea_info;
登录验证:
reg.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <style type="text/css"> #div{ font-size: 30px; font-style: italic; font-weight: bold; color: red; background-color: black; width: 300px; height: 200px; right: 0px; position: absolute; bottom: 0px; } *{ font-size: 12px; margin: 0px; padding: 0px; } .input{ width: 150px; } .btn{ width: 60px; height: 25px; border: 0px; cursor: pointer; border-radius:15px; line-height: 20px; } .btn:FOCUS{ outline: none; } .success{ color: green; font-weight: bold; font-size: 16px; } .error{ color: red; font-weight: bold; font-size: 16px; } </style> </head> <body> <div> <form action="" method="post" onsubmit="return checkForm()"> <table> <tr> <td>登录名:</td> <td> <input class="input" type="text" name="u_name" id="u_name" onblur="checkName()" onfocus="nameFocus()"> </td> <td> <div id="name_msg">必须以小写字母开始,可以包含数字字母组合,6-12之间</div> </td> </tr> <tr> <td>密码:</td> <td> <input class="input" type="password" name="u_pwd" id="u_pwd"> </td> <td> <div id="pwd_msg">密码6-12位之间</div> </td> </tr> <tr> <td>确认密码:</td> <td> <input class="input" type="password" id="re_pwd" onblur="checkRePwd()"> </td> <td> <div id="repwd_msg">密码6-12位之间</div> </td> </tr> <tr> <td>性别:</td> <td> <input type="radio" name="u_sex" value="男" checked="checked">男 <input type="radio" name="u_sex" value="女">女 </td> <td></td> </tr> <tr> <td>电话:</td> <td> <input class="input" type="text" name="u_tel" id="u_tel"> </td> <td> <div id="tel_msg">必须是11位数字</div> </td> </tr> <tr> <td>住址:</td> <td> <select name="u_pro"> <option value="山东省">山东省</option> <option value="江苏省">江苏省</option> </select> <select name="u_city"> <option value="青岛市">青岛市</option> <option value="济南市">济南市</option> </select> </td> <td></td> </tr> <tr> <td>自我介绍:</td> <td> <textarea class="input" rows="5" cols="20" name="u_info" id="u_info"></textarea> </td> <td> <div id="info_msg">自我介绍不能少于 10个字符</div> </td> </tr> <tr> <td></td> <td align="center"> <input class="btn" type="submit" value="注册"> <input class="btn" type="reset" value="重置" onclick="resetMsg()"> </td> <td></td> </tr> </table> </form> </div> <div id="div"> 你有一个没有查收的汇款 小贴士 </div> </body> <script type="text/javascript"> function checkName() { var name=document.getElementById("u_name").value; //^ 表示 从字符串的第一个字符开始匹配 //$ 表示 匹配到字符串的最后一个字符 var reg=/^[a-zA-Z][a-zA-Z0-9]{5,11}$/; var msg=document.getElementById("name_msg"); if(reg.test(name)) { msg.innerHTML="√"; msg.className="success"; return true; } msg.innerHTML="×"; msg.className="error"; return false; } function nameFocus() { var msg=document.getElementById("name_msg"); msg.innerHTML="必须以小写字母开始,可以包含数字字母组合,6-12之间"; msg.className=""; var n=document.getElementById("u_name"); n.select(); //n.value=""; } function checkRePwd() { var pwd=document.getElementById("u_pwd").value; var repwd=document.getElementById("re_pwd").value; var msg=document.getElementById("repwd_msg"); if(pwd==repwd) { msg.innerHTML="√"; msg.className="success"; return true; } msg.innerHTML="×"; msg.className="error"; return false; } function checkForm() { if(checkName()&&checkRePwd()) { return true; } return false; } function $(id) { return document.getElementById(id); } function resetMsg() { $("name_msg").innerHTML="必须以小写字母开始,可以包含数字字母组合,6-12之间"; $("name_msg").className=""; $("repwd_msg").innerHTML="必须与密码一致"; $("repwd_msg").className=""; } </script> </html>
用户协议倒计时
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <style type="text/css"> #main{ width: 300px; border: 1px solid gray; margin: 0px auto; } table{ width: 100%; } .td{ height: 400px; overflow: auto; } </style> </head> <body> <div id="main"> <form action="reg.jsp" method="post"> <table> <tr> <td> <div class="td"> 1.维护和谐社会<br> 2.尊老爱幼<br> 3.维护和谐社会<br> </div> </td> </tr> <tr> <td align="center"> <input type="submit" id="btn" value="同 (10) 意" disabled="disabled"> </td> </tr> </table> </form> </div> </body> <script type="text/javascript"> var i=9; var f; function show() { var btn=document.getElementById("btn"); btn.value="同 ("+i+") 意"; i--; if(i==-1) { clearInterval(f); btn.value="同 意"; btn.disabled=false; } } //定时器: f=setInterval("show()", 1000); </script> </html>
相关文章推荐
- js实现表单及时验证功能 用户信息立即验证
- 东软JavaWeb实训记-DAY6-小组项目开发实践(省市级联的实现)
- jQuery实现用户注册的表单验证
- js 使用form表单select类实现级联菜单效果
- JS实现的表单验证和强大的身份证
- 用户体验超棒并且功能强大使用简单的javascript表单验证 - Parsley.js
- js验证符合用户体验的网页表单特效
- JS实现表单验证
- 用户体验超棒并且功能强大使用简单的javascript表单验证 - Parsley.js
- JS实现的表单验证和强大的身份证
- jQuery实现用户注册的表单验证
- 编写OracleMembershipProvider,让SharePoint2007使用Oralce中的用户数据实现Form验证。 (第四天)
- 编写OracleMembershipProvider,让SharePoint2007使用Oralce中的用户数据实现Form验证。 (第三天)
- JS验证表单实现
- 用户体验超棒并且功能强大使用简单的javascript表单验证 - Parsley.js
- js实现的表单验证
- 实用的JS表单验证提示效果
- 编写OracleMembershipProvider,让SharePoint2007使用Oralce中的用户数据实现Form验证。 (第五天)
- 用户体验超棒并且功能强大使用简单的javascript表单验证 - Parsley.js
- 用户体验超棒并且功能强大使用简单的javascript表单验证 - Parsley.js