《个人办公助理》案例指导书文档格式.docx
《《个人办公助理》案例指导书文档格式.docx》由会员分享,可在线阅读,更多相关《《个人办公助理》案例指导书文档格式.docx(29页珍藏版)》请在冰豆网上搜索。
注意:
\grbgzl文件夹必须事先建立。
1.3创建用户并授权
创建数据库用户test,其默认表空间为grbgzl_tbs,并为其分配角色为CONNECT,RESOURCE,DBA。
代码如下:
--创建用户
Createusertest
identifiedbyoralce--设置口令
defaulttablespacegrbgzl_tbs--设置默认表空间
temporarytablespacetemp;
--设置临时表空间
--设置角色
GrantCONNECT,RESOURCE,DBAtotest;
1.4创建数据表
1.4.1用户表users
表名
Users
列名
列说明
数据类型(精度范围)
空/非空
约束条件
UserId
用户的惟一编号
Varchar2(20)
非空
主键
LoginName
用户登录名称
惟一
Password
用户登录密码
Name
用户姓名
Description
关于用户的描述
Varchar2(2000)
补充说明
用户的惟一编号构成为:
Usr0000+序列值
CreatetableUsers
(UserIdVarchar2(20)primarykey,
LoginNameVarchar2(20)uniquenotnull,
PasswordVarchar2(20)notnull,
NameVarchar2(20),
DescriptionVarchar2(2000)
);
1.4.2事件信息表Events
Events
EventId
事件的惟一编号
EventName
事件的标题
Varchar2(100)
EventContent
事件的内容梗概
EventDesc
事件描述
EventExer
事件执行者
外键
PlanBeginTime
计划开始时间
date
PlanFinishTime
计划结束时间
FinalFinishTime
最晚结束时间
ActBeginTime
实际开始时间
ActFinishTime
实际结束时间
IsFinished
事件是否完成
Char
(1)
默认为’N’
IsExpired
事件是否过期
IsDeleted
事件是否删除
序列的惟一编号构成为:
Evt0000+序列值
代码:
……
1.5创建序列
1.5.1序列User_seq
功能:
该序列用于产生用户的惟一编号,将该序列与触发器结合使用,可为每个新注册的用户产生惟一的编号。
应用于表:
该序列将应用于表Users
序列代码:
CREATESEQUENCEUser_Seq
STARTWITH1
INCREMENTBY1
CACHE20.
1.5.2序列Event_seq
该序列用于产生事件的惟一编号,将该序列与触发器结合使用,可为每个新添加的事件产生惟一的编号。
该序列将应用于表Events
……
1.6创建触发器
1.6.1触发器bi_users_userId
实现Users表产生惟一编号的功能
触发器代码:
CREATEORREPLACETRIGGERbi_users_userId
BEFOREinsertONusers
FOREACHROW
DECLARE
new_idnumber;
BEGIN
SELECTUser_seq.nextval
INTOnew_id
FROMDUAL;
:
new.userid:
='
usr'
||lpad(new_id,4,'
0'
END;
1.6.2触发器bi_events_eventId
实现Events表产生惟一编号的功能
1.7创建程序包
1.7.1程序包users_pkgs
用于实现获取用户信息、增加或修改用户信息,在该包中有三个公有存储过程:
•saveUsers():
用于存储用户信息
•getUsers():
用于查询用户信息,该存储过程为重载,可根据用户编号进行查询用户信息或根据用户登录名及密码查询用户信息
•updateUsers():
用于修改用户信息,只有UserId和登录名不能修改
程序包规范:
CREATEORREPLACEPACKAGEusers_pkgsIS
--定义一个动态游标,用于存储查找到的记录信息
TYPEcurUserISREFCURSOR;
--定义一些常量,用不同数值表示不同含义
Successconstantinteger:
=1;
UserExistconstantinteger:
=-1;
UserNotExistconstantinteger:
=-2;
UserNotExistOrPasswordErrorconstantinteger:
=-3;
UnKonwErrorconstantinteger:
=-8;
--定义存储过程,用于存储用户信息
ProceduresaveUsers
(var_userIdoutVarchar2,
var_loginNameinvarchar2,
var_passwordinvarchar2,
var_nameinvarchar2,
var_descriptioninvarchar2,
resultoutnumber
);
--定义存储过程,用于根据userId查找用户信息
ProceduregetUsers
(var_userIdinVarchar2,
var_useroutcurUser,
--定义存储过程,用于根据登录名和密码查找用户信息
(var_loginNameinVarchar2,
--定义存储过程,用于根据userId修改用户的其他信息
ProcedureupdateUsers
var_oldPasswordinvarchar2,
var_newPasswordinvarchar2,
var_newNameinvarchar2,
var_newDescriptioninvarchar2,
endusers_pkgs;
程序包包体代码:
CREATEORREPLACEPACKAGEBODYusers_pkgs
IS
ProceduresaveUsers
)
AS
isExistinteger:
=0;
userHasExistexception;
BEGIN
selectcount(*)intoisExistfromuserswherelower(loginName)=lower(var_loginName);
ifisExist>
0then
raiseuserHasExist;
else
insertintousers(loginName,password,name,description)
values(var_loginName,var_password,var_name,var_description);
selectuserIdintovar_useridfromuserswherelower(loginName)=lower(var_loginName);
commit;
result:
=Success;
endif;
EXCEPTION
WHENuserHasExistTHEN
var_usrId:
=null;
=UserExist;
WHENothersTHEN
=UnKonwError;
ENDsaveUsers;
ProceduregetUsers
notExistexception;
rec_userusers%rowtype;
SELECT*INTOrec_userFROMusersWHERElower(userId)=lower(var_userId);
IFSQL%notfoundTHEN
OPENvar_userFORselect*fromdual;
RAISEnotExist;
ELSE
OPENvar_userFORselect*fromusersWHERElower(userId)=lower(var_userId);
=success;
ENDIF;
WHENnotExistTHEN
=UserNotExist;
ENDgetUsers;
notExistorPasswordErrorexception;
rec_userusers%rowtype;
SELECT*INTOrec_userFROMusers
WHERElower(loginName)=lower(var_loginName)ANDlower(password)=lower(var_password);
RAISEnotExistorPasswordError;
OPENvar_userFORselect*fromusersWHERElower(loginName)=lower(var_loginName)ANDlower(password)=lower(var_password);
WHENnotExistorPasswordErrorTHEN
=UserNotExistorPasswordError;
v_pwdvarchar2(20);
passwordErrorexception;
selectpasswordintov_pwdfromuserswhereuserId=var_userId;
ifv_pwd<
>
var_oldPasswordthen
raisepasswordError;
else
updateusers
setpassword=var_newPassword,name=var_newName,
description=var_newDescription
whereuserId=var_userId;
WHENpasswordErrorTHEN
=UserNotExistorPasswordError;
ENDupdateUsers;
ENDusers_pkgs;
1.7.2程序包events_pkgs
2前台页面设计
2.1连接文件conn.jsp
<
%
Class.forName("
oracle.jdbc.driver.OracleDriver"
).newInstance();
//xtj为计算机名,1521为监听端口号,orcl为实例名
Stringurl="
jdbc:
oracle:
thin:
@xtj:
1521:
orcl"
;
//test为数据库用户名
Stringuser="
test"
//oracle为密码
Stringpassword="
oracle"
//建立连接对象
Connectionconn=DriverManager.getConnection(url,user,password);
%>
2.2登录页面login.jsp
%@pagelanguage="
java"
import="
java.util.*"
%@pagecontentType="
text/html;
charset=gb2312"
%>
%@pageimport="
java.sql.*"
!
DOCTYPEHTMLPUBLIC"
-//W3C//DTDHTML4.01Transitional//EN"
html>
<
head>
title>
登录页面<
/title>
/head>
--该javascript函数用于检测用户名及密码是否为空-->
scriptlanguage="
javascript"
functionregcheck()
{
if(document.form1.loginname.value=="
"
)
{window.alert("
用户名不可以为空!
请重新输入!
returnfalse;
}
if(document.form1.password.value=="
密码不可以为空!
/script>
body>
formname="
form1"
id="
action="
loginSuccess.jsp"
method="
post"
onSubmit="
returnregcheck()"
tablewidth="
100%"
border="
0"
cellspacing="
cellpadding="
4"
<
tr>
tdvalign="
top"
br>
/td>
/tr>
<
tdbgcolor="
#FFFFFF"
b>
/b>
#ffffff"
td>
fontcolor="
#CCCCCC"
tdalign="
right"
labelfor="
t1"
登录名:
/label>
td>
inputtype="
text"
name="
loginname"
<
t2"
密码:
password"
submit"
value="
提交"
/table>
/form>
/body>
/html>
2.3登录执行页面loginSuccess.jsp
登录成功页面<
%@includefile="
conn.jsp"
%
//取表单中的登录名和密码
Strings1=request.getParameter("
Strings2=request.getParameter("
s1=newString(s1.getBytes("
ISO8859_1"
),"
GBK"
//调用带输入输出参数的程序包中的存储过程
Stringprocedure="
{callusers_pkgs.getUsers(?
?
)}"
CallableStatementcs=null;
cs=conn.prepareCall(procedure);
//设置输入参数
cs.setString(1,s1);
cs.setString(2,s2);
//设置输出参数
cs.registerOutParameter(3,oracle.jdbc.OracleTypes.CURSOR);
cs.registerOutParameter(4,oracle.jdbc.OracleTypes.NUMBER);
//执行存储过程
cs.execute();
//取输出参数结果值
intx2=cs.getInt(4);
//如果存储过程执行成功--用户名及密码正确
if(x2==1){
//取输出参数--返回游标记录集
ResultSetrs=(ResultSet)cs.getObject(3);
rs.next();
Stringx1=rs.getString
(1);
//设置SESSION值被其他页面引用
session.setAttribute("
userId"
x1);
l