数据库访问技术.docx

上传人:b****1 文档编号:3166829 上传时间:2023-05-05 格式:DOCX 页数:16 大小:2.71MB
下载 相关 举报
数据库访问技术.docx_第1页
第1页 / 共16页
数据库访问技术.docx_第2页
第2页 / 共16页
数据库访问技术.docx_第3页
第3页 / 共16页
数据库访问技术.docx_第4页
第4页 / 共16页
数据库访问技术.docx_第5页
第5页 / 共16页
数据库访问技术.docx_第6页
第6页 / 共16页
数据库访问技术.docx_第7页
第7页 / 共16页
数据库访问技术.docx_第8页
第8页 / 共16页
数据库访问技术.docx_第9页
第9页 / 共16页
数据库访问技术.docx_第10页
第10页 / 共16页
数据库访问技术.docx_第11页
第11页 / 共16页
数据库访问技术.docx_第12页
第12页 / 共16页
数据库访问技术.docx_第13页
第13页 / 共16页
数据库访问技术.docx_第14页
第14页 / 共16页
数据库访问技术.docx_第15页
第15页 / 共16页
数据库访问技术.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据库访问技术.docx

《数据库访问技术.docx》由会员分享,可在线阅读,更多相关《数据库访问技术.docx(16页珍藏版)》请在冰点文库上搜索。

数据库访问技术.docx

数据库访问技术

实验项目名称:

数据库访问技术

(所属课程:

web系统与技术)

学院:

专业班级:

姓名:

学号:

实验日期:

实验地点:

合作者:

指导教师:

本实验项目成绩:

教师签字:

日期:

1、实验目的

(1)掌握JDBC的基本使用步骤。

(2)掌握数据源和规范的JDBC代码。

(3)掌握Spring的SimpleJdbcTemplate模板类常用方法。

二、实验条件

安装了Web开发环境的微机。

3、实验内容

(1)完成聊天室数据库设计以及三个实体类的数据访问代码。

(2)修改注册、登录、聊天三个功能模块的后台业务代码。

四、实验要求

(1)完善三个实体类的属性设计、构造方法等。

(2)设计聊天室数据库概念模型E-R图以及逻辑结构。

(3)完成JDBC的工具类和MD5加密工具类,配置DBCP数据源。

(4)设计三个实体类的数据访问DAO层接口。

(5)完成对三个接口的测试用例的开发。

(6)*使用Spring的SimpleJdbcTemplate模板类完成三个接口的实现。

(7)修改注册、登录、聊天三个功能模块的Servlet代码。

五、实验步骤

1、实体类的设计(用户、聊天室、消息)

首先建立三个实体类分别为ChatRoom,User和Message,注册窗口用户所填写的信息列表应该设计的和User类里边的成员变量一致,比如username,passWord等,Message类的设计应该包括信息发送者的Id,信息发送者,信息接受者,发送内容等以及相应的成员函数和StringtoString函数,ChatRoom类应该包括成员变量chatRoomId,chatRoomName等以及相应的成员函数。

(1)User类的重要实现代码如下:

privateStringuserName;//用户名

privateStringpassword;//密码

privatebooleansex;//性别

privateStringarea1;//国家

privateStringarea2;//城市

privateStringbirth1;//出生的年份

privateStringbirth2;//出生的月份

privateStringbirth3;//出生的日期

privateintchatRoomId;//聊天室的Id

publicUser(Stringusername,intchatroomId,StringpassWord,booleansex,Stringarea1,Stringarea2,Stringbirth1,Stringbirth2,Stringbirth3){

super();

this.userName=username;

this.chatRoomId=chatroomId;

this.password=passWord;

this.sex=sex;

this.area1=area1;

this.area2=area2;

this.birth1=birth1;

this.birth2=birth2;

this.birth3=birth3;}

(2)Message类的重要实现代码如下:

privateintmessageId;//信息id号

privateStringsender;//发送者

privateStringreceiver;//接收者

privateStringbody;//发送文本

privateDatetime;//发送时间

privateintchatRoomId;//聊天室的Id

privateinttype;//消息的类型

//普通消息

publicMessage(Stringsender,Stringreceiver,Stringbody,intchatRoomId){super();

this.sender=sender;

this.receiver=receiver;

this.body=body;

this.chatRoomId=chatRoomId;

this.type=0;

this.time=newDate();}

//系统消息

publicMessage(Stringsender,Stringbody,intchatRoomId){

super();

this.sender=sender;

this.body=body;

this.chatRoomId=chatRoomId;

this.type=1;

this.time=newDate();}

(3)ChatRoom类的重要实现代码如下:

privateintchatRoomId;//聊天室的Id

privateStringchatRoomName;//聊天室名字

privateLinkedListusers;

privateLinkedListmessages;

publicChatRoom(){

this.users=newLinkedList();

this.messages=newLinkedList();

}//带参数的ChatRoom类构造函数

2、注册、登录、聊天页面的功能业务设计(servlet的构造)

分别建立三个servlet类,名字分别为Regist、Chat、Login。

Regist.java主要完成的功能为检测用户注册信息是否完整,用户密码是否一致,提示用户注册成功后跳转到登录界面,Chat.java主要是判断用户是否已经注册过和密码的是否正确,chat使用户能够聊天并显示登录列表。

(1)Regist.java的实现代码:

privateUserDaouserDao=newUserDaoSpringSimple();

response.setContentType("text/html;charset=utf-8");

PrintWriterout=response.getWriter();

StringuserName=request.getParameter("username");

StringpassWord=request.getParameter("password");

booleansex=request.getParameter("sex").equals("f")?

true:

false;

Stringarea1=request.getParameter("selectcounity");

Stringarea2=request.getParameter("selectcity");

Stringbirth1=request.getParameter("selectyear");

Stringbirth2=request.getParameter("selectmonth");

Stringbirth3=request.getParameter("selectday");

Useruser=newUser(userName,0,MD5Util.md5(passWord),sex,area1,area2,birth1,birth2,birth3);

out.println(user.getUserName());

if(userDao.getUser(user.getUserName())==null){

userDao.addUser(user);

out.println("注册成功!

登陆");

}else

out.println("用户已经占用");

(2)Login.java的实现代码:

privateUserDaouserDao=newUserDaoSpringSimple();

privateMessageDaomessageDao=newMessageDaoSpringSimple();

privateChatRoomDaochatRoomDao=newchatRoomDaoSpringSimple();

privateintchatRoomId=1;

if(user==null)

out.println("用户没有注册
去注册");//判断用户是否已经注册过!

elseif(user.getChatRoomId()!

=0)out.println("你已在聊天室中!

"+"进入聊天室");

elseif(!

user.getPassword().equals(MD5Util.md5(passWord)))

{

out.println("密码错误!

亲爱的“"+username+"”你输入的密码有误,请点击重新登录!

");

}

else{

//更新用户的状态

user.setChatRoomId(chatRoomId);

//持久化到数据库中

userDao.updateUser(user);

//生成系统消息

Messagemes=newMessage(user.getUserName(),"进入了聊天室",chatRoomId);

//保存到数据库

messageDao.addMessage(mes);

//将chatRoom信息保存到application中

ChatRoomchatRoom=chatRoomDao.getChatRoom(chatRoomId);

chatRoom.getUsers().add(user);

chatRoom.getMessages().add(mes);

getServletContext().setAttribute("chatRoom",chatRoom);

session.setAttribute("user",user);

response.sendRedirect("../chatroom.html");

}

(3)Chat.java的实现代码:

privateUserDaouserDao=newUserDaoSpringSimple();

privateMessageDaomessageDao=newMessageDaoSpringSimple();

privateChatRoomDaochatRoomDao=newchatRoomDaoSpringSimple();

response.setContentType("text/html;charset=utf-8");

PrintWriterout=response.getWriter();

StringinputWord=request.getParameter("inputWord");

Useruser=(User)request.getSession().getAttribute("user");

out.println(user.getUserName());

ChatRoomchatRoom=(ChatRoom)this.getServletContext().getAttribute("chatRoom");

if(inputWord!

=null||!

inputWord.equals("")){

Messagemessage=newMessage(user.getUserName(),"liuxianli",inputWord,user.getChatRoomId());

messageDao.addMessage(message);

//将chatRoom信息保存到application中

//chatRoom=chatRoomDao.getChatRoom(user.getChatRoomId());

chatRoom.getMessages().addFirst(message);

getServletContext().setAttribute("chatRoom",chatRoom);

}

response.sendRedirect("../CR2.jsp");

}

(4)Logout.java的实现代码:

privateUserDaouserDao=newUserDaoSpringSimple();

privateMessageDaomessageDao=newMessageDaoSpringSimple();

privateChatRoomDaochatRoomDao=newchatRoomDaoSpringSimple();

privateintchatRoomId=0;

if(user==null){

out.println("用户没有登录
去登录");//判断用户是否已经注册过!

}else{

//更新用户的状态

user.setChatRoomId(chatRoomId);

//持久化到数据库中

userDao.updateUser(user);

//生成系统消息

Messagemes=newMessage(user.getUserName(),"离开了聊天室",chatRoomId);

//保存到数据库

messageDao.addMessage(mes);

//将chatRoom信息保存到application中

ChatRoomchatRoom=(ChatRoom)this.getServletContext().getAttribute("chatRoom");

//ChatRoomchatRoom=chatRoomDao.getChatRoom(chatRoomId);

chatRoom.getUsers().remove(user);

chatRoom.getMessages().addFirst(mes);

//getServletContext().setAttribute("chatRoom",chatRoom);

session.removeAttribute("user");

response.sendRedirect("../chatroom.html");

}

3、连接数据库和密码加密

(1)连接数据库的主要实现代码如下(JDBC):

publicfinalclassjdbcUtil{

privatestaticDataSourcedataSource;

static{

try{//注册驱动,只需做一次

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

Propertiesproperties=newProperties();

properties.load(jdbcUtil.class.getClassLoader()

.getResourceAsStream("dbcpconfig.properties"));

dataSource=BasicDataSourceFactory.createDataSource(properties);

}catch(Exceptione){

e.printStackTrace();

thrownewExceptionInInitializerError(e);}}

publicstaticDataSourcegetDataSource(){

returndataSource;

}*获取连接*/

publicstaticConnectiongetConnection()throwsSQLException{

returndataSource.getConnection();}

*释放资源

publicstaticvoidfree(ResultSetrs,Statementst,Connectioncon){

try{

if(rs!

=null)

rs.close();

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}finally{

try{

if(st!

=null)

st.close();

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}finally{

try{

if(con!

=null)

con.close();

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();}}}}

(2)密码加密的主要实现代码如下

publicstaticStringmd5(Stringstr){

try{

MessageDigestmd=MessageDigest.getInstance("MD5");

md.update(str.getBytes());

byte[]byteDigest=md.digest();

inti;

StringBufferbuf=newStringBuffer("");

for(intoffset=0;offset

i=byteDigest[offset];

if(i<0)

i+=256;

if(i<16)

buf.append("0");

buf.append(Integer.toHexString(i));}

//32位加密

returnbuf.toString();

//16位的加密

//returnbuf.toString().substring(8,24);

}catch(NoSuchAlgorithmExceptione){

e.printStackTrace();

returnnull;}}

(3)创建数据库的SQL语句如下(weiliao.sql):

createtablechatRoom(

chatRoom_idintnotnull,

chatRoom_namevarchar(10)null,

constraintPK_CHATROOMprimarykeynonclustered(chatRoom_id)

);

createtablemessage(

message_idintidentity(1,1),

sendervarchar(10)null,

receivervarchar(10)null,

chatRoom_idintnull,

bodyvarchar(500)null,

timedatetimenull,

typeintnull,

constraintPK_MESSAGEprimarykeynonclustered(message_id)

);

createtableusers(

user_namevarchar(10)notnull,

chatRoom_idintnull,

passwordvarchar(32)null,

sexbitnull,

area1varchar(30)null,

area2varchar(30)null,

birth1varchar(10)null,

birth2varchar(10)null,

birth3varchar(10)null,

constraintPK_USERSprimarykeynonclustered(user_name)

);

insertintochatRoomvalues(0,'离线');

insertintochatRoomvalues(1,'安工聊天室');

insertintochatRoomvalues(2,'计科聊天室');

select*fromusers;

select*frommessage;

select*fromchatRoom;

(4)chatRoomDaoSpringSimple类主要代码:

publicclasschatRoomDaoSpringSimpleimplementsChatRoomDao{

privateSimpleJdbcTemplatesimple=newSimpleJdbcTemplate(jdbcUtil.getDataSource());

publicChatRoomgetChatRoom(intchatRoomId){

Stringsql="selectchatRoom_idchatRoomId,chatRoom_namechatRoomNamefromchatRoomwherechatRoom_id=?

";

ChatRoomchatRoom=simple.queryForObject(sql,newBeanPropertyRowMapper(ChatRoom.class),chatRoomId);

returnchatRoom;

}//通过chatRoomId查找聊天室

}

(5)MessageDaoSp

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2