为客户做的门户网站,点击顶部的链接时,总出现这种错误,但这种错误没有规律,很难定时发现,
今天上去看了一下,又发现这个问题,我把错误以及源代码贴出来,望高手解答
Error 500--Internal Server Error 
Error code:PRV_RES_015 Error level:warn Error model:null Error description:can't not get Connection of gimp
at com.gever.gimp.info.dao.impl.SortDAODB2Impl.countchildren(SortDAODB2Impl.java:892)
at jsp_servlet._gdca._homepage._gsjj.__gsjj._jspService(__gsjj.java:614)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:996)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:45)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:316)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:274)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:320)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1435)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:505)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:996)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:45)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6458)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3661)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2630)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
Caused by: Error code:can't not get Connection of gimp Error level:warn Error model:null Error description:
at com.gever.gimp.util.Utility.getConnection(Utility.java:34)//下面是这个类
at com.gever.gimp.info.dao.impl.SortDAODB2Impl.countchildren//下面有这个类以及相关方法(SortDAODB2Impl.java:873)
... 31 more
 public class Utility {
  private static Utility instance = new Utility();
  private Utility() {
  }
  public static Utility getInstance(){
    return instance;
  }
  public Connection getConnection() throws DAOException{
    Connection cn = null;
    try{
      ConnectionProvider cp = ConnectionProviderFactory.getConnectionProvider(
          "gimp");
      cn = cp.getConnection();
      return cn;
    } catch (Exception e){
      e.printStackTrace();
      throw new DAOException("can't not get Connection of gimp");
    }
  }  public long[] toLongArray(String[] strings){
    long[] result = null;
    if (strings == null){
      return null;
    }
    result = new long[strings.length];
    for(int i=0; i<strings.length; i++){
      result[i] = Long.parseLong(strings[i]);
    }
    return result;
  }  /**
   * 把“2004-10-10”解析为java.sql.Timestamp类型
   * @param date String
   * @return Timestamp
   */
  public static java.sql.Timestamp parseTimestamp(String date){
    return null;
  }  public static boolean isLogon(HttpServletRequest request){
    boolean result = false;
    if (request.getSession().getAttribute(Constant.USER_ID) != null){
      result = true;
    }
    return result;
  }  public static boolean isSuperAdministrator(HttpServletRequest request){
  boolean checkuser=false;
      try{  RoleDAO role=new DefaultRoleDAO();
    Role mrole=new DefaultRole();
    I_User iuer=new DefaultUser();
    String userID =(String)request.getSession().getAttribute(com.gever.gimp.util.Constant.USER_ID);    mrole.setId(1);    iuer.setId(Integer.parseInt(userID));
      if(mrole.getId()==iuer.getId())
        checkuser=true;
      else{
        checkuser=false;
      }    }catch(Exception e){e.printStackTrace();}
    return checkuser;
  }  public static boolean isHasUploadPermisssion(HttpServletRequest request){
    return isHasPermission("GIMP-UPFB", "ALL", request);
  }
  public static boolean isHasDownPermisssion(HttpServletRequest request){
    return isHasPermission("GIMP-DOFB", "ALL", request);
  }  private static boolean isHasPermission(String resourceCode, String operationCode, HttpServletRequest request){
    boolean result = false;
    UserPermission userPermission = null;
    Collection c = (Collection)request.getSession(true).getAttribute(com.gever.sysman.privilege.util.Constants.USER_PERMISSION);
    if (c != null){
      Iterator i = c.iterator();
      while (i.hasNext()){
        userPermission = (UserPermission)i.next();
        if (resourceCode.equals(userPermission.getRes_code()) && operationCode.equals(userPermission.getOpt_code())){
          result = true;
          break;
        }
      }
    }
    return result;
  }
}
//用于计算分类有多少个儿子
    public List countchildren(long fid) throws DAOException {
        Connection connect = null;
        PreparedStatement ps = null;
        PreparedStatement chinum = null;
        List sortlist = new ArrayList();
        int a = 0;
        String sel = "SELECT * FROM GIMP_INFORMATION_SORT WHERE PARENT_ID =" +
            fid +
            " AND STATUS=1 ORDER BY ORDER2";
        try {
            connect = Utility.getInstance().getConnection();
            ps = connect.prepareStatement(sel);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
              SortVO show = new SortVO();
                show.setId(rs.getLong("Id"));
                show.setName(rs.getString("Name"));
                show.setDescription(rs.getString("Description"));
                show.setLev(rs.getInt("Lev"));
                show.setStatus(rs.getInt("STATUS"));
                show.setOrder2(rs.getInt("Order2"));
                show.setParentId(rs.getLong("Parent_Id"));
                show.setUrl(rs.getString("Url"));
                show.setIs_home(rs.getInt("Is_home"));
                sortlist.add(show);
            }
            return sortlist; /*返回一个数组*/
        } catch (Exception e1) {
            e1.printStackTrace();
            throw new DAOException("PRV_RES_015", e1);
        } finally {
            super.release(connect, ps);
        }
    }

解决方案 »

  1.   

    public List findByPid2(long pid) throws DAOException {       Connection connect = null;
           PreparedStatement ps = null;
           PreparedStatement chinum = null;
           List sortlist = new ArrayList();
           String sel = "SELECT * FROM GIMP_INFORMATION_SORT WHERE PARENT_ID = " +
               pid +
               " AND STATUS=1 ORDER BY ORDER2";
           SearchDAO search = SearchFactory.getInstance().getSearchDAO();
           try {
               connect = Utility.getInstance().getConnection();
               ps = connect.prepareStatement(sel);
               ResultSet rs = ps.executeQuery();
               while (rs.next()) {
                   SortVO show = new SortVO();
                   List childrenList = countchildren(rs.getLong("Id"));
                   show.setId(rs.getLong("Id"));
                   show.setName(rs.getString("Name"));
                   show.setDescription(rs.getString("Description"));
                   show.setLev(rs.getInt("Lev"));
                   show.setStatus(rs.getInt("STATUS"));
                   show.setOrder2(rs.getInt("Order2"));
                   show.setParentId(rs.getLong("Parent_Id"));
                   //show.setUrl(rs.getString("Url"));
                   show.setIs_home(rs.getInt("Is_home"));
                   show.setChildNum(childrenList.size());
                   show.setChildren(childrenList);
                   show.setInfor(getContent(rs.getLong("Id")));
                   if (getContent(rs.getLong("Id")).size() != 0) {
                       //System.out.println("------000001111111111000----------");
                       InformationDAODB2Impl cutIntro = new InformationDAODB2Impl();
                       show.setInfoVo( ( (InformationVO) getContent(rs.getLong(
                           "Id")).get(0)));
        System.out.println("=================job url begin============>>>>");
                       String url = search.setUrlBySortId2(connect,
                           String.valueOf(show.getInfoVo().
                                          getId()), show.getInfoVo().getTitle(),
                           show.getInfoVo().getSortId(), false);
                       System.out.println("=================job  url end============>>>>"+url);
                       show.setUrl(url);
                   } else {
                       show.setIntro("");
                   }
                   sortlist.add(show);
               }
               return sortlist; /*返回一个数组*/
           } catch (Exception e1) {
               e1.printStackTrace();
               throw new DAOException("PRV_RES_015", e1);
           } finally {
               super.release(connect, ps);
           }
       }
    //GDCA显示每一个模块分类的前三条子分类名的方法
        public List findByPid(long pid) throws DAOException {        Connection connect = null;
            PreparedStatement ps = null;
            PreparedStatement chinum = null;
            List sortlist = new ArrayList();
            String sel = "SELECT * FROM GIMP_INFORMATION_SORT WHERE PARENT_ID = " +
                pid +
                " AND STATUS=1 ORDER BY ORDER2";
            SearchDAO search = SearchFactory.getInstance().getSearchDAO();
            try {
                connect = Utility.getInstance().getConnection();
                ps = connect.prepareStatement(sel);
                ResultSet rs = ps.executeQuery();
                while (rs.next()) {
                    SortVO show = new SortVO();
                    List childrenList = countchildren(rs.getLong("Id"));
                    show.setId(rs.getLong("Id"));
                    show.setName(rs.getString("Name"));
                    show.setDescription(rs.getString("Description"));
                    show.setLev(rs.getInt("Lev"));
                    show.setStatus(rs.getInt("STATUS"));
                    show.setOrder2(rs.getInt("Order2"));
                    show.setParentId(rs.getLong("Parent_Id"));
                    //show.setUrl(rs.getString("Url"));
                    show.setIs_home(rs.getInt("Is_home"));
                    show.setChildNum(childrenList.size());
                    show.setChildren(childrenList);
                    show.setInfor(getContent(rs.getLong("Id")));
                    if (getContent(rs.getLong("Id")).size() != 0) {
                        //System.out.println("------000001111111111000----------");
                        InformationDAODB2Impl cutIntro = new InformationDAODB2Impl();
                        show.setInfoVo( ( (InformationVO) getContent(rs.getLong(
                            "Id")).get(0)));
                        //System.out.println("------00000222222220000----------");
    //                    System.out.println("=============id==============>>>"+String.valueOf(show.getInfoVo().
    //                                       getId()));
    //                    System.out.println("==========title==============>>>"+show.getInfoVo().getTitle());
    //                    System.out.println("=============sortid========>>>>"+show.getInfoVo().getSortId());
                        String url = search.setUrlBySortId(connect,
                            String.valueOf(show.getInfoVo().
                                           getId()), show.getInfoVo().getTitle(),
                            show.getInfoVo().getSortId(), false);
                       // System.out.println("=================url============>>>>"+url);
                        show.setUrl(url);
                    } else {
                        show.setIntro("");
                    }
                    sortlist.add(show);
                }
                return sortlist; /*返回一个数组*/
            } catch (Exception e1) {
                e1.printStackTrace();
                throw new DAOException("PRV_RES_015", e1);
            } finally {
                super.release(connect, ps);
            }
        }
      

  2.   

    据我参察,返回的connection有问题,请把return cn;写在方法体的最后面。如果发生了异常,你的方法是不会返回任何值的,因为你的异常体没有写返回值代码,在后面调用的时候最好判断一下它是否为null.以下是我稍改后的代码
      public Connection getConnection() throws DAOException{
        Connection cn = null;
        try{
          ConnectionProvider cp = ConnectionProviderFactory.getConnectionProvider(
              "gimp");
          cn = cp.getConnection();
        } catch (Exception e){
          e.printStackTrace();
          throw new DAOException("can't not get Connection of gimp");
        }
        return cn;
      }