CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web 开发

关于封装DAO,javabean,jsp的层次结构以及代码的效率!(附代码)————大家pp!!

楼主stillfire(恒)2004-09-02 12:51:56 在 Java / Web 开发 提问

先show   一下封装的dao  
  ------------------------  
  package   ees.dbaccess;  
   
  import   java.sql.*;  
  import   java.util.*;  
  import   java.io.*;  
  import   pms.pmora;  
   
  public   class   GuidelineDAO{  
      private   java.util.Collection   con=null;  
      private   pmora   db=new   pmora();                                     //ClassFor,建立连接  
       
      public   java.util.Collection     getGuidelinebyParent(java.math.BigDecimal   parentid)  
          throws   SQLException   {  
                        con=new   ArrayList();  
            try   {  
                    String   sql="select   *   from   ees_guideline   where   parentid="+parentid;  
                    ResultSet   rs=db.executeQuery(sql);  
                    while   (rs.next()){  
                        GuidelineVO     v=new   GuidelineVO();  
                        int   i=1;  
                        v.setGuidelineid(rs.getBigDecimal(i++));  
                        v.setGuidelinename(rs.getString(i++));  
                        v.setParentid(rs.getBigDecimal(i++));  
                        v.setNote(rs.getString(i++));  
                        v.setLayer(rs.getBigDecimal(i++));  
                        con.add(v);  
                    }  
            }   catch   (Exception   e)   {  
                      System.out.println("查询—指标体系出错—     u"+e.getMessage());  
            }  
            return   con;  
      }  
   
        public   java.util.Collection     getGidbyParent(java.math.BigDecimal   parentid)  
          throws   SQLException   {  
                        con=new   ArrayList();  
            try   {  
                    String   sql="select   guidelineid   from   ees_guideline   where   parentid="+parentid;  
                    ResultSet   rs=db.executeQuery(sql);  
                    while   (rs.next()){  
                        GuidelineVO     v=new   GuidelineVO();  
                        int   i=1;  
                        v.setGuidelineid(rs.getBigDecimal(i++));  
                        con.add(v);  
                    }  
            }   catch   (Exception   e)   {  
                      System.out.println("查询—指标id出错—     u"+e.getMessage());  
            }  
            return   con;  
      }  
   
   
            public   void   close(){  
              db.close();  
          }  
   
      }  
   
  -----------------------  
  这个比较的简单,但是也有不同类型的查询返回不同的   Collection。  
  其中,我把  
  pmora   db=new   pmora();             设定为私有变量,这样,所有的     表操作(query,update)全部共享这个连接,直到这个页面中调用了     DAO.close();关闭他的连接  
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
  经过测试,我发现这样比   在每个   表操作(query,update)要快一些!  
   
   
  下面贴一个    
  我应用这个     bean的例子,,我就是在这个页面的时候  
  出现了问题,,,,  
   
   
   
   
  问题点数:100、回复次数:13Top

1 楼stillfire(恒)回复于 2004-09-02 12:52:16 得分 0

<%@   page   contentType="text/html;   charset=gb2312"   language="java"   import="java.sql.*,java.util.*,ees.dbaccess.*,zjn.util.ConvertDateStr;"   errorPage=""   %>  
   
  <!DOCTYPE   HTML   PUBLIC   "-//W3C//DTD   HTML   4.01   Transitional//EN"   "http://www.w3.org/TR/html4/loose.dtd">  
  <html>  
  <head>  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  <title>无标题文档</title>  
  <link   rel="stylesheet"   href="/pms/image/main.css"   type="text/css">  
  <script   language="javascript"   src="/pms/image/time.js"></script>  
  </head>  
   
  <jsp:useBean   id="GetValue"   scope="page"   class="ees.dbaccess.idToname"   />  
  <jsp:useBean   id="expertdao"   scope="page"   class="ees.dbaccess.RelationDAO"   />  
  <jsp:useBean   id="Evaluate"   scope="page"   class="ees.dbaccess.Evaluation"   />  
  <jsp:useBean   id="scoredao"   scope="page"   class="ees.dbaccess.ScoreDAO"   />  
  <jsp:useBean   id="totalscoredao"   scope="page"   class="ees.dbaccess.TotalscoreDAO"   />  
  <%!  
      String   expertid="";  
      java.math.BigDecimal   guidelineid=null,guidelineid1=null,finalscore=null;  
      String   action="",flag="";  
   
      java.util.Collection   con=null,con1=null;//   for   guidelineVO  
      java.util.Collection   con2=null;//for   RelationVO  
      Iterator   it=null,it1=null,it2=null;  
      GuidelineVO   vo=null,vo1=null;    
      RelationVO   vo2=null;  
    //   GuidelineDAO   guidedao=new   GuidelineDAO();  
  %>  
  <%  
      //if   (guidedao==null){  
  GuidelineDAO     guidedao=new   GuidelineDAO();        
    //   }   //定义再<%!     后面是全局变量,这里是每次都初始化的变量  
  //   Evaluation   Evaluate=new   Evaluation();  
      String   resourceid=request.getParameter("resourceid");  
      if   (totalscoredao.IsUpdate(resourceid)){  
      action="update";  
    }   else   {  
      action="add";  
    }  
  %>  
  <body>  
  <table   width=780   border="0"   cellpadding="0"   cellspacing="1"     align="center">  
                                                      <tr>    
          <td     class="cl1_titleoff"   width="13%"   align="center"   valign="middle">专家\指标体系</td>  
      <%  
          con1=guidedao.getGidbyParent(new   java.math.BigDecimal(0));  
          for   (   it1   =   con1.iterator();   it1.hasNext();   )   {  
          vo1   =   (GuidelineVO)it1.next();  
  guidelineid1=vo1.getGuidelineid();  
      %>  
                                                          <td   class="cl1_titleoff"width="60"   align="center"   valign="middle"><%=guidelineid1%></td>  
        <%  
                con=guidedao.getGidbyParent(guidelineid1);  
                                    for   (   it   =   con.iterator();   it.hasNext();   ){  
                  vo   =   (GuidelineVO)it.next();  
  guidelineid=vo.getGuidelineid();  
        %>  
      <td   class="cl1_titleoff"width="61"   align="center"   valign="middle"   ><%=guidelineid%></td>  
  <%  
          }//二级指标  
  }//一级指标  
   
  %>  
  <td   class="cl1_titleoff"     width="13%"   >  
    专家总分  
  </td>  
      </tr>  
      <%  
          con2=expertdao.getRelation(resourceid);  
          int   expcnt=0;  
  java.math.BigDecimal   sumscore=new   java.math.BigDecimal(0);  
  for   (   it2   =   con2.iterator();   it2.hasNext();   )   {  
          vo2   =   (RelationVO)it2.next();  
  expertid=vo2.getUserid();  
      %>  
       
       
       
      <tr>  
          <td     class="cl1_titleoff">  
            <%=GetValue.getNamebyId(expertid)%>  
  </td>  
  <%  
              con1=guidedao.getGidbyParent(new   java.math.BigDecimal(0));  
                  for   (   it1   =   con1.iterator();   it1.hasNext();   )   {  
          vo1   =   (GuidelineVO)it1.next();  
  guidelineid1=vo1.getGuidelineid();  
        %>  
                                                          <td     class="mode4"   width="60"   align="center"   valign="middle"   bgcolor=><%  
      if   (scoredao.IsUpdate(resourceid,expertid)){  
        out.println(Evaluate.getFirstValue(guidelineid1,resourceid,expertid));  
    }   else   {  
   
    }%>  
  </td>  
    <%  
                con=guidedao.getGidbyParent(guidelineid1);  
                                    for   (   it   =   con.iterator();   it.hasNext();   ){  
                  vo   =   (GuidelineVO)it.next();  
  guidelineid=vo.getGuidelineid();  
        %>  
      <td   class=""width="61"   align="center"   valign="middle"   bgcolor=>  
      <%  
      if   (scoredao.IsUpdate(resourceid,expertid)){  
        out.println(GetValue.getScore(guidelineid,resourceid,expertid));  
    }   else   {  
   
    }  
  %>  
  </td>  
  <%  
          }  
  }  
  %>  
  <td><%  
  if   (scoredao.IsUpdate(resourceid,expertid)){  
                      finalscore=Evaluate.getFinalResult(resourceid,expertid);  
      sumscore=sumscore.add(finalscore);  
        out.println("专家分   "+finalscore+"   总分   "+sumscore);  
    }   else   {  
    }  
  %></td>  
      </tr>  
      <%  
   
      if   (scoredao.IsUpdate(resourceid,expertid)){  
        expcnt++;//打分专家的数量  
            }  
          }//     end   of   the   row  
  double   sumdouble=sumscore.doubleValue();  
  double   avgdouble=sumdouble/expcnt;  
  //avgscore=sumscore.divide(cnt,2,BigDecimal.ROUND_HALF_UP);  
      %>  
   
  <%  
      expertdao.close();  
      guidedao.close();  
      Evaluate.close();  
      scoredao.close();  
  %>  
  </table>  
  <p>  
   
  <p>  
  <table   width="600"   border="0"   cellspacing="0"   cellpadding="1"     align="center">  
   
  <form   name="frmAdd"   action="/ees/admin/totalscore?resourceid=<%=resourceid%>&action=<%=action%>"   method="post">  
   
  <tr   align="left"   bgcolor="#8db4ef">    
                                                  <td     class="cl1_titleoff"   height="24"   colspan="2"   valign="middle"><div   align="center"><font   color="#FFFFFF">评估结论</font></div></td>  
          </tr>  
          <tr   bgcolor="#FFFFFF">    
              <td     class="mode4"width="110"   height="24"   align="right"   valign="middle">总体得分</td>  
              <td     class="mode5"width="486"   valign="middle"   align="middle"><font   color="#FF0000"><%   out.println("专家数   "+expcnt+"   总分   "+sumdouble+"   平均   "+avgdouble);%></font>  
      <input   type="hidden"   name="tscore"   value="<%=avgdouble%>">  
      </td>  
  </tr>  
   
  <%  
      TscoreVO   resultvo=   totalscoredao.getOneRow(resourceid);  
          %>  
           
  <tr   bgcolor="#FFFFFF">    
              <td     class="mode4"width="110"   height="24"   align="right"   valign="middle">评估专家</td>  
              <td     class="mode5"width="486"   valign="middle"   align="middle"></td>  
  </tr>  
  <tr   bgcolor="#FFFFFF">    
              <td     class="mode4"width="110"   height="24"   align="right"   valign="middle">评估时间</td>  
    <td     class="mode5"width="436"   valign="middle"   align="left">  
    <input   type="text"     style="WIDTH:100px"     name="totaltime"   value="<%  
  if   (action.equals("update")){  
    out.println(ConvertDateStr.timeTostr(resultvo.getTotaltime()));  
    }  
    %>">  
                <a   href="javascript:show_calendar('frmAdd.totaltime');"   onmouseover="window.status='Date   Picker';return   true;"   onmouseout="window.status='';return   true;"><img   src="/pms/image/show-calendar.gif"   width=24   height=16   border=0   ></a></td>  
  </tr></td>  
  </tr>  
  <tr   bgcolor="#FFFFFF">    
              <td     class="mode4"width="110"   height="24"   align="right"   valign="middle">评估结论</td>  
              <td     class="mode5"width="486"   valign="middle"   align="left"><textarea   name="note"   cols="50"   rows="10"   ><%  
      if   (action.equals("update")){  
      out.print(resultvo.getNote());}  
      %></textarea></td>  
  </tr>  
   
    <tr   bgcolor="#FFFFFF">    
      <td   height="20"   colspan="2"   align="right"   valign="middle">   <div   align="center">   <%=action%>  
      <input   type="submit"   name="Submit"   value="确定">&nbsp;         &nbsp;         &nbsp;    
      <input   type="reset"   name="Submit2"   value="重置">&nbsp;         &nbsp;         &nbsp;    
              <input   name="button"   type="button"   class="main1"  
                style=font-size:9pt;background-color:rgb(255,255,255);color:rgb(0,0,0)   onclick="history.go(-1)"   value="返回">  
                </div></td>  
            </form>  
    <%  
    GetValue.close();  
    totalscoredao.close();  
    %>  
          </tr>  
      </table>  
  </body>  
  </html>  
  Top

2 楼stillfire(恒)回复于 2004-09-02 13:00:02 得分 0

关键的是下面  
  <jsp:useBean   id="GetValue"   scope="page"   class="ees.dbaccess.idToname"   />  
  <jsp:useBean   id="expertdao"   scope="page"   class="ees.dbaccess.RelationDAO"   />  
  <jsp:useBean   id="Evaluate"   scope="page"   class="ees.dbaccess.Evaluation"   />  
  <jsp:useBean   id="scoredao"   scope="page"   class="ees.dbaccess.ScoreDAO"   />  
  <jsp:useBean   id="totalscoredao"   scope="page"   class="ees.dbaccess.TotalscoreDAO"   />  
  <%!  
  guidedao=new   GuidelineDAO();  
  %>  
  <%  
    %>  
  1。把GuidelineDAO定义为全局变量   <%!     %>  
  则速度最快,但是,这样的话,显然不能正确的     建立和关闭的连接(  
  ◎如果有函数能够测试     连接是否关闭就好了◎)  
   
  2。只有GuidelineDAO   定义为局部变量,   这样每次刷新页面都要初始化一次,速度就要慢下来了!  
  3。还有一点就是,我不知道如果把   DAO定义为   javabean     (我不知道不同scope对程序有什么影响)   速度怎么样!?  
   
  我想问一下大家的dao,     怎么样封装?  
  调用bean   的     怎么样定义不同的scope呢?????????Top

3 楼BillyW(阿弥陀佛)回复于 2004-09-02 13:01:16 得分 30

在JSP页面访问数据库、加入业务逻辑可不是一个好主意。  
   
  注意分离!Top

4 楼stillfire(恒)回复于 2004-09-02 13:03:09 得分 0

接上面的,  
   
  问问关于基本的面向对象的问题!  
   
  class   A{  
      private   ss=null;  
      public   A(){  
        ss=new   ss();  
  }  
  }  
  和     class   A{  
        private   ss=new   ss();  
  }  
   
  有没有区别,在对象初始化的时候,怎么样才能   占用最少的资源呢?  
   
  Top

5 楼stillfire(恒)回复于 2004-09-02 14:06:07 得分 0

回复人:   BillyW(阿弥陀佛)  
   
   
  Top

6 楼stillfire(恒)回复于 2004-09-02 14:14:00 得分 0

回复人:   BillyW(阿弥陀佛)  
   
                  我这个页面主要还是   通过Collection   返回不同的集合,但是有一些表需要进行连接查询  
  比如:   select   a   from   A   where   b   in   (select   b   from   B   where)  
  这样的连接查询,,,,  
   
  我使用的     把b     从B中取出来,然后通过一个bean     (通过读   B   把b   转化为   a)  
  GetValue.getNamebyId(expertid)  
  就是一个通过id转化得到name   的                 bean  
   
  if   (totalscoredao.IsUpdate(resourceid)){  
      action="update";  
    }   else   {  
      action="add";  
    }  
  是一个判断这个表中有没有响应的值,,,,,如果有的话进行更新,没有则是操作!  
  那么       也就     掺着  
  value="<%  
  if   (action.equals("update")){  
    out.println(ConvertDateStr.timeTostr(resultvo.getTotaltime()));  
    }  
    %>">  
                这样的业务逻辑了!!  
   
   
   
  Top

7 楼yangzuyu12(秋天的童话)回复于 2004-09-02 14:14:30 得分 0

?@#$%^&*()!!·#¥%……—*()?〉《|+——)|+_Top

8 楼stillfire(恒)回复于 2004-09-02 17:02:27 得分 0

写的     撇了,,  
  把楼上的看晕了,,,,  
   
  顶一下Top

9 楼stillfire(恒)回复于 2004-09-03 07:56:49 得分 0

大家给点反映!  
   
  up   一下啊Top

10 楼HITZXL(编程要厚道)回复于 2004-09-03 08:38:40 得分 30

太长了!  
  没看出关键问题  
  但一味追求代码效率,恐怕不是层次结构所要解决的问题Top

11 楼stillfire(恒)回复于 2004-09-03 09:39:13 得分 0

谢谢楼上的。。。。。。  
   
  不过,我是就觉得层次不清晰,因为  
  <%!%>还有   bean之间的     概念还不是很清晰Top

12 楼flylyke(爱就像英雄莫问出处)回复于 2004-09-03 10:00:11 得分 40

业务和逻辑干嘛要写在jsp页里呢。既然你已经有DAO的概念了  
  建议看看hibernateTop

13 楼stillfire(恒)回复于 2004-09-03 13:30:40 得分 0

楼上说得是不是      
  把   update   和add   放在一个页面,我觉得这样,网页   看起来更加清晰一些Top

相关问题

  • 有谁知道DAo里边封装了什么?
  • 将dao封装进ejb后频繁连接的问题
  • jsp不能调用封装数据库的javabean的问题!!
  • 封装?
  • 在JSP中,如何把对数据库的操作全部封装在JAVABEAN、SERVLET中?欢迎讨论!
  • 提问:JSP中有Bean来封装应用逻辑和类库,ASP.Net中如何来实现呢?
  • 请问封装好的jsp上传组件有哪些?在哪里下载?jspsmartupload除外
  • 大家给我讲解一下吧。讲解一下 jsp,封装,Servlet,JavaBean的关系是什么呢
  • 哪位有javabean实现的,jsp显示记录集表格封装到javabean中的
  • bcb 封装

关键词

  • 代码
  • 专家
  • 评估
  • 结论

得分解答快速导航

  • 帖主:stillfire
  • BillyW
  • HITZXL
  • flylyke

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo