您的位置:首页 > 数据库 > Oracle

东软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.建表的语法:
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java web oracle