• 第二周作业


    选取问题:

    我的github : https://github.com/wukunguang

    复审自己的或者别人的代码,找出一些问题。  

      就拿我写过一个项目的一个功能片段来说吧。由于当时是自己第一次使用Spring。。而且只会Spring MVC框架。所以对有些Spring 特性还不是很了解。

       审查代码地址:

        https://github.com/wukunguang/wechat_Sky31/blob/master/src/dao/WallDao.java

        首先大体看一遍。对于第一个方法,我只描述了这个方法的功能,对返回参数没进行解释。

        代码清单:

        

        /**
         * 本方法用于获取微信墙事件的列表。
         * @return
         */
        public List<Wallmain> getWallList(){
    
            Connection conn = DBConnection.getConnection();
            ResultSet rs = null;
            List<Wallmain> wallmainList = null;
            if (conn!=null){
                try {
                    Statement statement = conn.createStatement();
                    rs = statement.executeQuery("SELECT * FROM wallmain");
                    wallmainList = new ArrayList<Wallmain>();
    
                    while (rs.next()){
                        Wallmain wallmain = new Wallmain();
                        wallmain.setW_id(rs.getInt("w_id") + "");
                        wallmain.setCoverurl(rs.getString("coverurl"));
                        wallmain.setTitle(rs.getString("title"));
                        wallmainList.add(wallmain);
                    }
    
                } catch (SQLException e) {
                    e.printStackTrace();
                    wallmainList = null;
                }
                finally {
                    DBConnection.closeConn(conn);
                }
    
            }
    
            return wallmainList;
        }
    

      而且还有一点,就是捕获异常时候,没有进行日志打印。这也是很不好的一个习惯。待工程部署后,遇到问题不能准确地定位问题来源。

      

      第二个方法。

      

        /**
         * 本方法用于通过wid获取当前事件的详细内容。
         * @param wid
         * @return
         */
        public Wallmain getWallmainByWid(String wid){
    
            Connection conn = DBConnection.getConnection();
            ResultSet rs = null;
            Wallmain wallmain = null;
            if (conn!=null){
    
                try {
                    Statement statement = conn.createStatement();
                    rs = statement.executeQuery("SELECT * FROM wallmain WHERE w_id = "+wid);
    
    
                    while (rs.next()){
                        wallmain = new Wallmain();
                        wallmain.setTitle(rs.getString("title"));
                        wallmain.setW_id(rs.getInt("w_id") + "");
                        wallmain.setCoverurl(rs.getString("coverurl"));
                        wallmain.setWallContentBean(getWallContentListByWid(wid));
    
                    }
    
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                finally {
                    DBConnection.closeConn(conn);
                }
    
            }
    
            return wallmain;
        }

      这里没对传入参数进行解释。由于这个项目是我一个人全部写完的。所以当这个项目是多人合作时候,就会发生交接上的问题。。就是传入参数意义不明。。对交接工作产生不好的影响。

     

    /**
         *
         * @param wid
         * @param wcb
         * @return
         */
    
        public boolean writeWallContent2DB(String wid, WallContentBean wcb){
    
            Connection conn = DBConnection.getConnection();
            boolean isWrite = false;
    
    
            if (conn == null){
                return false;
            }
    
            try {
    
                PreparedStatement prep = conn.prepareStatement("INSERT INTO wallcontent(nickname, user_id, " +
                        "headimgurl, textcontent, isshow,time) VALUES (?,?,?,?,?,?)"
                        ,PreparedStatement.RETURN_GENERATED_KEYS);
                if (prep!=null){
                    prep.setString(1, wcb.getNickname());
                    prep.setString(2, wcb.getUser_id());
                    prep.setString(3, wcb.getHeadimgurl());
                    prep.setString(4,wcb.getTextcontent());
    
                    prep.setInt(5,0);
                    prep.setString(6,wcb.getTime());
                    prep.executeUpdate();
    
                    isWrite = true;
    
                    ResultSet rs = prep.getGeneratedKeys();
    
                    if (rs.next()){
    
                        final int CUSTOMER_ID_COLUMN_INDEX = 1;
                        int cIndex = rs.getInt(CUSTOMER_ID_COLUMN_INDEX);
                        wcb.setC_id(cIndex);
                        isWrite = isWrite && writeWallCache2DB(wid,wcb);
    
                    }
                }
    
            } catch (SQLException e) {
                e.printStackTrace();
                isWrite = false;
            }
            finally {
                DBConnection.closeConn(conn);
    
            }
    
    
            return isWrite;
        }

    关于这段:

    首先当时的想法是创建预处理语句。这样能比较有效的防止SQL拼接的注入攻击。当然这样的问题也是很明显。就是这里依然没有说明参数和返回值说明。

    ====================================================

    总结:由于代码都是自己写的,所以都是给自己看的。那么自己也就少打了很多注释,但是自我感觉现在这个习惯应该要改正。因为以后的项目基本都是团队项目。所以以后的代码中要写明注释。写有质量的注释。

      

     

  • 相关阅读:
    07.C#泛型的限制和可空类型的简单说明(三章3.5-四章4.1)
    列表的相关操作和方法/深浅拷贝
    字符串的格式化format和字符串相关函数
    for循环和关键字
    双项循环经典题
    python流程控制
    python运算符
    容器类型的强制转换和字典强转
    python强制类型转换和自动类型转换
    Javascript 执行环境及作用域
  • 原文地址:https://www.cnblogs.com/magicguang/p/5270199.html
Copyright © 2020-2023  润新知