对一个简单的JDBC包装器的扩展及应用(2)
|
对一个简单的JDBC包装器的扩展及应用(2)
我使用Javabean来实现很多功能,这样可以减少在JSP中的java代码量,方便我们对界面的改进。我们要实现的功能为对学生的编辑,添加,删除和列表。这些功能定义在两个javabean中:下面是两个jsp文件的主要代码: <%-- student.jsp --%> <%@ page contentType="text/html;charset=GB2312" %> <%@ page import="org.gjt.mm.MySQL.*,manger.bean.*,manger.tools.*,manger.business.*" %> 软件开发网 www.mscto.com
<html> 软件开发网 www.mscto.com <head> <SCRIPT TYPE="text/JavaScript" LANGUAGE="JavaScript" > <!-- function doDelete() { if(confirm(´你确定删除吗?´)) { 软件开发网 www.mscto.com document.EditForm.event.value=´delete´; 软件开发网 www.mscto.com document.EditForm.submit(); } } function doEdit() { if(confirm(´你确定编辑吗?´)) { document.EditForm.event.value=´showEdit´; document.EditForm.submit(); } } function showAddPage() { document.location=´editstudent.jsp?event=showAdd´; } </SCRIPT> </head> <body bgcolor="#FFFFFF" text="#000000"> <% try { Class.forName("org.gjt.mm.mysql.Driver").newInstance(); } catch (Exception E) { out.println("Unable to load driver."); } %> <jsp:useBean id="table" scope="page" class="manger.bean.ListStudentBean" /> <% Student[] student=table.getStudent(pageContext); int total=0; int currPage=table.getCurPage(); int pageCount=table.getPageCount(); if(student!=null) {total=student.length;}%> <FORM NAME="EditForm" ACTION="editstudent.jsp"> <INPUT TYPE="HIDDEN" NAME="event" VALUE=""> <table width="75%" border="1"> <tr> <td colspan="5">学生列表</td> </tr> <tr> <td>学号</td> <td>姓名</td> <td>班级</td> <td>备注一</td> <td>选择</td> </tr> <%for (int i=0;i<total;i ){ Student current=student[i];%> <tr> 软件开发网 www.mscto.com <td><%=current.getId()%></td> <td><%=current.getName()%></td> <td><%=current.getDepart()%></td> <td><%=current.getSex() %></td> <td> <input type="checkbox" name="id" value=<%=current.getId()%>> </td> <% } %> </tr><tr> <td colspan="5"> <INPUT TYPE="BUTTON" onclick="doEdit();" VALUE="编辑"> <INPUT TYPE="BUTTON" onclick="showAddPage()" VALUE="增加"> <INPUT TYPE="BUTTON" onclick="doDelete();" VALUE="删除"> 软件开发网 www.mscto.com </td> </tr> </table> </form> </html>
<%-- studentedit.jsp --%> <jsp:useBean id="table" scope="page" class="manger.bean.EditStudentBean" /> <%table.processRequest(pageContext);%> <p>_lt;/p> <form name="EditForm" action="editstudent.jsp"> <INPUT TYPE="hidden" NAME="event" VALUE="<%=table.getEvent()%>" > <table width="75%" border="1"> <tr> <td colspan="2"> <div align="center"><b>编辑学生信息</b></div> </td> </tr> <tr> <td width="40%">学号:</td> <td width="60%"> <input type="text" name="id" value="<%=table.getStudent().getId()%>"> </td> </tr> <%--下面的一些学生信息我们省略了--%> <tr> <td colspan="2"> <input type="submit" name="Submit" value="确定"> 软件开发网 www.mscto.com </td> </tr> </table> </form>
我的想法是在student.jsp中显示学生列表,从这个页面可以转到增加和编辑页面,也可以在这个页面中删除学生,这三个功能都是由editstudent.jsp完成的。在editstudent.jsp中非常关键的一行代码就是<%table.processRequest(pageContext);%>,这会调用EditStudentBean类的processRequest方法:下面是EditStudentBean类processRequest方法和addStudent方法的代码: public void processRequest (PageContext pageContext) throws SQLException,ServletException,IOException{ this.student.setId(""); this.student.setName(""); this.student.setPassword(""); this.student.setDepart(""); this.student.setSex(""); HttpServletRequest request=(HttpServletRequest)pageContext.getRequest(); String event=request.getParameter("event"); //this.event=event; if(event==null || event.equals("")||event.equals("showAdd")) {this.event="add"; } else if(event.equals("showEdit")) {this.event="edit"; String id=request.getParameter("id"); Student stu=StudentFactory.findStudentById(id); this.student=stu; } else if(event.equals("add")) 软件开发网 www.mscto.com {this.addStudent(pageContext); } else if(event.equals("delete")) {this.deleteStudent(pageContext); } else if(event.equals("edit")) {this.editStudent(pageContext); } }
public void addStudent(PageContext page) throws SQLException,ServletException,IOException{ HttpServletRequest request=(HttpServletRequest)page.getRequest(); HttpServletResponse response=(HttpServletResponse)page.getResponse(); JspWriter out=page.getOut(); String id=request.getParameter("id"); String name=request.getParameter("name"); String sex=request.getParameter("sex"); String pass=request.getParameter("password"); String depart=request.getParameter("depart"); if (id!=null&&name!=null&&sex!=null&&pass!=null&&depart!=null &&!id.equals("")&&!name.equals("")&&!sex.equals("")&&!pass.equals("")&&!depart.equals("")) 软件开发网 www.mscto.com {Student s=new Student(); s.setId(id); s.setName(name); s.setSex(sex); s.setPassword(pass); s.setDepart(depart); s.save(null); response.sendRedirect("student.jsp"); } else {out.print("请添完所有信息"); } }
processRequest方法的功能主要为获取提交给editstudent.jsp的event的值,根据不同的event调用不同的函数。例如event=add,则调用addStudent函数。
注意:在设置Student对象的各个属性值时,一定要按照表(见上面的SQL语句)中顺序来设置,例如在表中,id字段在name字段的前面,所以setId方法在setName方法前面,这主要是由于Table类中的putRow函数中执行插入操作的SQL语句有缺陷。在那个SQL语句中,它是按各属性在Row中的顺序来执行插入操作的。如过你不愿意按表中字段的顺序来设置Student的属性,可以对putRow函数更改如下: String ss = ""; if (conditions==null) { ss = "INSERT INTO " name ´("; for (int i=0;i<row.length(); i) { String k = row.getKey( i ); ss = k; 软件开发网 www.mscto.com if (i != row.length()-1) ss = ", "; }
ss =") VALUES ("; for (int j=0; j<row.length(); j) { String v = row.get( j ); ss = "´" v "´"; 软件开发网 www.mscto.com
if (j != row.length()-1) ss = ", "; } ss = ")"; }
限于篇幅,我省略了student.jsp文件中的一些内容,对这个jsp文件进行处理的bean为ListStudentBean,这个类主要实现一个函数getStudent,这个函数主要通过StudentFactory查寻到所有的学生,由于我在此函数中进行了分页处理,因此此函数只返回当前页需要的Student数组。具体的代码参看附件。
总之,我改进之后的这个JDBC封装器还是比较有效的,它能满足一般地需要,当然你也可以根据你的情况对其进行扩充,以更好地适应你的开发。
软件开发网 www.mscto.com 代码在Tomcat4.01 mysql3.23.43下测试通过。
关于作者 宗锋,男,西北大学计算机系硕士。兴趣主要集中在:java,Linux,enhydra,barracuda。希望能与有共同爱好的朋友进行交流。E-mail: zong_feng@263.net.
(全文完) 源代码网推荐 源代码网供稿. |
