数据库原理网上授课平台(二)_第1页
数据库原理网上授课平台(二)_第2页
数据库原理网上授课平台(二)_第3页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库原理网上授课平台(二)

第6章系统详细设计

6.1数据库连接实现业务逻辑层与数据库的连接是通过JDBC技术,它是“JavaDatabaseConnectivity”的缩写。JDBC由一组用Java语言编写的接口和类组成,是对数据库操作的对象封装,可以实现与数据库的无关性。它以成为一种供数据库开发者使用的标准API。6.1.1JDBC的基本功能

a.建立与数据库的连接。b.发送SQL语言。c.处理数据库操作结果。6.1.2JDBC的特点

a.与SQL语言的一致性。它允许使用从属于任何DBMS的SQL语言;提供ODBC风格的转义语句;利用DatabaseMetaData接口提供关于DBMS的描述性信息,从而使应用程序能适应每个DBMS。b.可在现有数据库上实现。c.提供与其它Java系统一致的界面。这说明开发人员可以采用一致的编程界面来处理数据库编程。d.简单化。e.使用静态的通用数据类型。f.多方法,多功能。6.1.3JDBC的驱动类型:

a.JDBC-ODBC桥驱动程序。b.调用本地数据库应用编程接口驱动程序。c.数据库中间件纯Java驱动程序。d.直接连接数据库的纯Java驱动程序。6.1.4将连接数据库的代码封装在一个JavaBean中DBconn.java代码如下:packagecom.soul.struts.tool;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;publicclassDBconn{privateStringdriver="sun.jdbc.odbc.JdbcOdbcDriver";//数据库的驱动privateStringurl="jdbc:odbc:mydb";//URL地址privateConnectionconn=null;//无参构造器,利用它来加载数据库连接对象publicDBconn(){try{Class.forName(driver);//加载数据库驱动conn=DriverManager.getConnection(url);//加载数据库连接对象}catch(Exceptione){System.out.println("数据库加载失败");}}publicConnectiongetConn(){returnconn;}//关闭数据库结果集publicstaticvoidcloseRs(ResultSetrs){try{if(rs!=null){System.out.println("关闭数库结果集");rs.close();rs=null;}}catch(SQLExceptione){e.printStackTrace();}}//关闭数据库操作对象publicstaticvoidclosePstmt(PreparedStatementpstmt){try{if(pstmt!=null){System.out.println("关闭数库操作对象");pstmt.close();pstmt=null;}}catch(SQLExceptione){e.printStackTrace();}}//关闭数库连接对象publicstaticvoidcloseConn(Connectionconn){try{if(conn!=null){System.out.println("关闭数库连接对象");conn.close();conn=null;}}catch(SQLExceptione){e.printStackTrace();}}}6.2系统功能模块的设计与实现6.2.1用户注册模块

当用户提出注册请求,系统显示用户注册页面,提示用户输入个人信息,用户输入个人信息,系统验证其信息是否符合要求,如果用户输入的个人信息不符合系统要求,则系统显示错误信息并要求用户重新填写个人信息,用户重新填写信息,或者取消注册,注册成功系统将用户信息写入数据库,页面将经一个显示注册成功的页自动进入登录界面。如下图6-1所示:图6-1用户注册页面要实现用户信息验证功能,主要是通过客户端页面上的JavaScript和服务器端验证,例如验证用户输入的用户名在数据库中是否已存在,如果已存在则在提交的时候会给出提示“用户名已存在”,就要求重新注册。客户端页面上的javascript代码如下:<Scriptlanguage="javascript">functioncheckEmpty(form){for(i=0;i<form.length;i++){if(form.elements[i].value==""){alert("表单信息不能为空!!!");form.elements[i].focus();returnfalse;}}if(form.user_password.value!=form.user_password1.value){alert("两次输入的密码不一致,请重新输入!!!");form.user_password.focus();returnfalse;}if(form.user_name.value.length<1){alert("用户名要在1-20个字符之间!");form.user_name.focus();returnfalse;}varpattern=/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;if(!pattern.exec(form.email.value)){alert("邮箱格式错误!!");returnfalse;}}</Script>在服务器端验证时,RegisterAction调用RegisterManager类中的addUser方法.addUser会先调同类中的hasUser方法来验证用户是否已存在。关键代码如下:publicbooleanhasUser(Stringuser_name)throwsException{Connectionconn=null;DBconndb=newDBconn();PreparedStatementpstmt=null;ResultSetrs=null;try{conn=db.getConn();pstmt=conn.prepareStatement(Sql.registCheck_tb_user);pstmt.setString(1,user_name);rs=pstmt.executeQuery();rs.next();intn=rs.getInt(1);if(n==1){System.out.print("用户名存在,返回true");returntrue;}else{System.out.print("用户名不存在,返回false");returnfalse;}}catch(SQLExceptione){e.printStackTrace();throwe;}finally{DBconn.closeRs(rs);DBconn.closePstmt(pstmt);DBconn.closeConn(conn);}}6.2.2登录模块

在登录模块中分为教师登录和学生登录,只有输入正确的用户名和密码才能进入系统。在登录发生错误时会出现相关的提示信息,如用户名或密码错误。当教师登录成功后进入主页可以进行电子教案管理,视频管理,作业管理,在线答疑,留言管理等相关的操作。学生登录成功后进入主页可以查看,下载电子教案和视频,在线向教师提问,上传作业等相关操作。用户登录模块是系统的入口,用户登录模块应具有以下功能:获得用户权限。登录模块做为系统的入口,需要对权限进行控制。不同身份登录获的不同的使用权。本系统分为教师用户和学生用户两种权限。教师用户登录后可以进行电子教案管理,视频管理,作业管理,在线答疑,留言管理等相关的操作;学生用户登录成功后可以查看,下载电子教案和视频,在线向教师提问,上传作业等相关操作。网站首页默认为学生用户登录页面。教师用户登录可以点页面中的“教师登录”进入教师登录页面。验证用户的用户名和密码。系统在登录过程中必须输入其正确的用户名和密码,登录模块会对其进行核对。如果用户的用户名或密码错误则提示信息“用户名或密码错误”并返回用户登录界面。为实现学生登录功能,要根据用户输入的用户名和密码判断是否是合法用户。于是创建一个LoginAction类。调用UserManager类中的validate(Stringname,Stringpassword)方法:publicbooleanvalidate(Stringname,Stringpassword)throwsException{Connectionconn=null;DBconndb=newDBconn();PreparedStatementpstmt=null;ResultSetrs=null;try{conn=db.getConn();pstmt=conn.prepareStatement(Sql.login_tb_user);pstmt.setString(1,name);pstmt.setString(2,password);rs=pstmt.executeQuery();rs.next();intn=rs.getInt(1);if(n==1){returntrue;}else{returnfalse;}}catch(SQLExceptione){e.printStackTrace();throwe;}finally{db.closeRs(rs);db.closePstmt(pstmt);db.closeConn(conn);}}本系统的教师登录模块采用了固定的用户名和密码。为实现它,我创建了一个AdminLoginAction类,调用AdminManager类中的方法:publicbooleanvalidate(Stringname,Stringpassword){if(("admin".equals(name))&&("admin".equals(password))){System.out.print("正确!");returntrue;}else{System.out.print("错了");returnfalse;}}如果教师输入的用户名或密码有误则会有提示:"用户名或密码不匹配,请重新登录!"接着页面会跳到教师登录页面。鉴于对系统安全的考虑,用户使用系统必须先到登录页面进行身份验证,通过登录窗口用户输入用户名和密码,只有输入正确的用户名和密码后用户才能进入系统。下图页面是学生登录的首页如图6-2:图6-2用户登录页面教师登录页面如图6-3所示:图6-3教师登录页面6.2.3电子教案管理模块

a.电子教案管理模块分为学生用户主页的电子教案管理和教师用户主页的电子教案管理。教师成功登录后,在教师用户主页中的电子教案管理模块,教师可以上传新电子教案,也可以删除以前传过的旧电子教案。点击“上传电子教案”就会进入到电子教案上传的页面,教师点击“浏览”选择要上传的电子教案,然后点上传就完成了一个电子教案的上传。创建了一个继承于DispatchAction的UpLoadAction类,该类用于上传和下载文件。关键代码如下:UpLoadFormuploadFile=(UpLoadForm)form;FormFilefile=uploadFile.getFile();StringuuidName=UUID.randomUUID().toString();Stringkejian_Name=uuidName+file.getFileName();Stringkejian_Time=uploadFile.getKejian_Time();ServletContextservletContext=this.getServlet().getServletContext();Stringpath=servletContext.getRealPath("");FileOutputStreamout=newFileOutputStream(path+"/uploadC/"+kejian_Name);out.write(file.getFileData());out.flush();out.close();UpLoadManagerulm=newUpLoadManager();booleanflag=ulm.kejianAdd(video_Name,video_Time);if(flag){request.setAttribute("currentTime",newDate());request.setAttribute("upload","success");retur,,nmapping.findForward("upload");}request.setAttribute("upload","fail");returnmapping.findForward("AuploadC");path表示得到当前项目下webRoot的路径,为了保存视频,在webRoot下建立了一个名为uploadV的文件夹,考虑到一处编写到处运行的java语言初衷,把视频保存在tomcat服务器下.代码中的FormFile类,是映射上传文件的,对你上传的文件进行操作,可以取得文件的名字,文件的内容等。由于怕上传的电子教案的名的字会相同,于是用个UUID类。用UUID.randomUUID()给文件名加一个随机的32位的不会重复的数字。上传成功的电子教案会存在服务器的uploadC文件夹中。教师上传电子教案页面如图6-4所示:图6-4教师上传电子教案图c.

学生用户成功登录后,可点击“下载电子教案”查看电子教案,选择想要下载的电子教案点击“下载”。学生下载电子教案页面如图6-5所示:图6-5学生下载电子教案页面6.2.4公告管理模块

站内公告管理小模块主要功能是管理站内公告,教师可通过公告管理模块向学生们发布通知,也可以删除通知。这是一个小模块,因此创建Back_NoteAction类调用NoteManager类中的add()方法向数据库中添加公告内容:publicbooleanadd(Stringnote_title,Stringnote_content,Stringnote_time)throwsException{Connectionconn=null;DBconndb=newDBconn();PreparedStatementpstmt=null;try{conn=db.getConn();pstmt=conn.prepareStatement(Sql.add_tb_note);pstmt.setString(1,note_title);pstmt.setString(2,note_content);pstmt.setString(3,note_time);intn=pstmt.executeUpdate();if(n==1){returntrue;}else{returnfalse;}}catch(SQLExceptione){e.printStackTrace();throwe;}finally{DBconn.closePstmt(pstmt);DBconn.closeConn(conn);}}学生的主页是由主页中include进去几个页组成的。所以要在用户的页面中显示公告,创建了一个Head_MainAction类,在该类中的show方法中使用request.getSession().setAttribute("list_note",list_note);将list_note放在session中的。于是只要浏览器不关,在任何一个显示页面都能取到用EL表达${lsit_note}取得。添加公告页面如图6-6所示:图6-6添加公告页面6.2.5留言管理模块

在教师的留言管理模块中,教师可以回复留言和删除留言。学生只可以查看留言和留言。教师用户创建了一个Back_MessageAction类,调用MessageManager中的诸方法来添加或删除留言。学生用户创建了一个Head_MessageAction类,调用MessageManager中某些方法。在学生显示留言页面要分我利用了jstl加EL表达式分页,关键代码如下:MessageActionFormmaf=(MessageActionForm)form;MessageManagermm=newMessageManager();ArrayListlist=mm.query();intpageSize=list.size()/4+1;ArrayListlist1=newArrayList();intbegin=0;intend=3;intcurrentPage=1;//从页面得到数据{begin=maf.getBegin();end=maf.getEnd();currentPage=maf.getCurrentPage();}maf.setBegin(begin);maf.setEnd(end);maf.setCurrentPage(currentPage);list1.add(maf);request.setAttribute("currentTime",newDate());request.setAttribute("list",list);request.setAttribute("list1",list1);request.setAttribute("pageSize",Integer.valueOf(pageSize));returnmapping.findForward("showmessage");教师查看留言页面如图6-7所示:图6-7教师查看留言页面6.2.6视频管理模块

视频管理模块分为学生用户主页的视频管理和教师用户主页的视频管理。教师成功登录后,在教师用户的主页中的视频管理模块,教师可以上传新的视频,也可以删除以前传过的视频。点击“上传视频”就会进入到电子教案上传的页面,教师点击“浏览”选择要上传的视频,然后点上传就完成了一个视频的上传。上传视频的关键代码如下:UpLoadFormuploadFile=(UpLoadForm)form;FormFilefile=uploadFile.getFile();StringuuidName=UUID.randomUUID().toString();Stringvideo_Name=uuidName+file.getFileName();Stringvideo_Time=uploadFile.getVideo_Time();System.out.println("时间="+video_Time);ServletContextservletContext=this.getServlet().getServletContext();Stringpath=servletContext.getRealPath("");FileOutputStreamout=newFileOutputStream(path+"/uploadV/"+video_Name);out.write(file.getFileData());out.flush();out.close();UpLoadManagerulm=newUpLoadManager();booleanflag=ulm.videoAdd(video_Name,video_Time);if(flag){request.setAttribute("currentTime",newDate());request.setAttribute("upload","success");returnmapping.findForward("upload");}request.setAttribute("upload","fail");returnmapping.findForward("AuploadV");path表示得到当前项目下webRoot的路径,为了保存视频,在webRoot下建立了一个名为uploadV的文件夹,把视频保存在tomcat服务器下。同时为避免出现相同文件名的视频名字,每个视频上传之前在视频名前加了一段唯一的UUID字符编码,对应数据可存入tb_video表中的video_Name字段,将来在显示视频的详细信息时同样根据video_Name来寻找视频。学生下载视频,用video_Name查找下载视频。下载视频的代码如下:UpLoadFormulf=(UpLoadForm)form;Stringvideo_Name=ulf.getVideo_Name();video_Name=newString(video_Name.getBytes("ISO-8859-1"),"GB18030");ServletContextservletContext=this.getServlet().getServletContext();Stringpath=servletContext.getRealPath("");FileInputStreaminPut=newFileInputStream(path+"/uploadV/"+video_Name);response.setContentType("application/x-msdownload");response.setHeader("Content-Disposition","attachment;filename="+newString(video_Name.getBytes("GB18030"),"ISO-8859-1"));OutputStreamout=response.getOutputStream();byte[]b=newbyte[1024*1024];while(inPut.read(b)>0){out.write(b);out.flush();}inPut.close();out.close();教师可以根据video_Name删除某些视频,调用delVideo()方法将相关信息删除。关键代码如下:UpLoadFormulf=(UpLoadForm)form;Stringvideo_Name=ulf.getVideo_Name();ServletContextservletContext=this.getServlet().getServletContext();Stringpath=servletContext.getRealPath("");Filefilename=newFile(path+"/uploadV/"+video_Name);filename.delete();UpLoadManagerum=newUpLoadManager();booleanflag=um.delVideo(video_Name);6.2.7作业管理模块

本模块在学生用户的主页是学生将自己的作业上传到服务器下的uploadT文件夹中,还可以下载老师批改后上传的作业。在教师用户的主页中老师将学生上传的作业下载下来,之后再将批改好的作业上传到服务器中,供学生下载。上传作业与上传视频类似,只不过多了个Stringuser_name=uploadFile.getUser_name();用来收集上传试卷的用户名。关键代码如下:UpLoadFormuploadFile=(UpLoadForm)form;FormFilefile=uploadFile.getFile();Stringtest_Name=file.getFileName();Stringtest_Time=uploadFile.getTest_Time();Stringuser_name=uploadFile.getUser_name();System.out.println("时间="+test_Time);ServletContextservletContext=this.getServlet().getServletContext();Stringpath=servletContext.getRealPath("");FileOutputStreamoutPut=newFileOutputStream(path+"/uploadT/"+file.getFileName());outPut.write(file.getFileData());outPut.flush();outPut.close();UpLoadManagerulm=newUpLoadManager();booleanflag=ulm.testAdd(test_Name,test_Time,user_name);学生上传作业页面如图6-8所示:图6-8学生上传作业页面6.2.8在线答疑模块

在这个模块中学生和教师可以在线交流,学生可以向老师在线提出问题,老师将在线回答。学生或者教师将说的话发送,将先存到数据中,随之再将数据库中的后20条记录取出,在message.jsp中显示。在线答疑页面的主要代码如下:<framesetrows="*"cols="*,250"framespacing="1"frameborder="yes"border="1"bordercolor="#99ffff"><framesetrows="*,117"cols="*"framespacing="0"frameborder="yes"border="0"><framesrc="message.jsp"name="mainFrame"frameborder="1"><framesrc="control.jsp"name="bottomFrame"frameborder="1"></frameset><framesetrows="*,119"cols="*"framespacing="0"frameborder="yes"border="0"><framesrc="leave.jsp"name="bottomFrame1"frameborder="1"scrolling="no"noresize="noresize"></frameset></frameset>6.2.9友情链接管理模块

教师还可将自己知道的一些好的网站添加到网站里,把友情链接的网名和网址添加进去,学生会在页面上看见添加进的网站名字,用户可以点网站名进入相应的网站。为了方便管理和安全,将所有的sql语句都封装在一个Sql类中,并且每条语句都定义成publicstaticfinal类的,这样就不允许有别的语句继承它们。具体的代码如下:publicfinalclassSql{//用户登录publicstaticfinalStringlogin_tb_user="selectcount(*)fromtb_userwhereuser_name=?anduser_password=?";//用户注册向数库数中增加数据publicstaticfinalStringregistAdd_tb_user="insertintotb_user(user_name,user_password,realname,email)"+"values(

?,?,?,?)";//

publicstaticfinalStringqueryId_tb_user="selectuser_idfromtb_userwhereuser_name=?";publicstaticfinalStringregistCheck_tb_user="selectcount(*)fromtb_userwhereuser_name=?";publicstaticfinalStringadd_tb_articleType="insertintotb_articleType(typeName,description)values(?,?)";publicstaticfinalStringquery_tb_articleType="select*fromtb_articleType";publicstaticfinalStringdel_tb_articleType="deletefromtb_articleTypewheretype_id=?";publicstaticfinalStringadd_tb_article="insertintotb_article(title,type_id,content,phTime,number)values(?,?,?,?,?)";publicstaticfinalStringdel_tb_article="deletefromtb_articlewherearticle_id=?";publicstaticfinalStringquery_Article="select*fromtb_article";publicstaticfinalStringshow_Article="selecttb_article.*,tb_articleType.*fromtb_article,tb_articleTypewhere(tb_article.type_id=tb_articleType.type_idandtb_article.type_id=?andarticle_id=?)";publicstaticfinalStringxin="selecttb_article.*,typeName,descriptionfromtb_articleleftjointb_articleTypeon(tb_article.type_id=tb_articleType.type_id)";publicstaticfinalStringadd_tb_note="insertintotb_note(note_title,note_content,note_time)values(?,?,?)";publicstaticfinalStringquery_tb_note="select*fromtb_note";publicstaticfinalStringdel_tb_note="deletefromtb_notewherenote_id=?";publicstaticfinalStringshow_tb_note="select*fromtb_notewherenote_id=?";publicstaticfinalStringupdate_tb_note="updatetb_notesetnote_content=?,note_time=?wherenote_id=?";publicstaticfinalStringupdate_tb_article="updatetb_articlesetcontent=?,phTime=?wherearticle_id=?";publicstaticfinalStringquery_tb_user="selectuser_id,user_name,realname,emailfromtb_user";publicstaticfinalStringdel_tb_user="deletefromtb_userwhereuser_id=?";publicstaticfinalStringquery_tb_message="select*fromtb_messageorderbymes_id";publicstaticfinalStringdelone_tb_message="deletefromtb_messagewheremes_id=?";publicstaticfinalStringdelall_tb_message="deletefromtb_message";publicstaticfinalStringreply_tb_message="insertintotb_message(mes_content,mes_sender,mes_sendTime,to_whom)values(?,?,?,?,?)";publicstaticfinalStringadd_tb_link="insertintotb_link(link_name,link_add)values(?,?)";publicstaticfinalStringdel_tb_link="deletefromtb_linkwherelink_id=?";publicstaticfinalStringquery_tb_link="selectlink_id,link_name,link_addfromtb_link";//

publicstaticfinalStringpart_Article="selectarticle_id,title,content,phTime,numberfromtb_articleorderbyarticle_iddesc";publicstaticfinalStringpart_Article="selectarticle_id,title,content,phTime,number,typeNamefromtb_articleleftjointb_articleTypeon(tb_article.type_id=tb_articleType.type_id)orderbyarticle_iddesc";publicstaticfinalStringshow_link="select*fromtb_link";publicstaticfinalStringshow_note="select*fromtb_noteorderbynote_iddesc";publicstaticfinalStringadd_tb_video="insertintotb_video(video_Name,video_Time)values(?,?)";publicstaticfinalStringadd_tb_test="insertintotb_test(test_Name,test_Time,user_name)values(?,?,?)";publicstaticfinalStringquery_tb_video="selectvideo_Name,video_Timefromtb_videoorderbyvideo_iddesc";publicstaticfinalStringquery_tb_test="selecttest_Name,test_Time,user_namefromtb_testorderbytest_iddesc";publicstaticfinalStringdel_tb_video="deletefromtb_videowherevideo_Name=?";}第7章开发中遇到的难点和对策

a.数据库的连接问题问题:数据库的连接:在开发过程中经常出现查找不到数据库,出现这样的错误一般是数据库的连接出现问题。数据库加载驱动有问题。一开始用的是Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();Stirngurl=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论