第二周作业

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二周作业相关的知识,希望对你有一定的参考价值。

选取问题:

我的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拼接的注入攻击。当然这样的问题也是很明显。就是这里依然没有说明参数和返回值说明。

 

 

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

 

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

  

 

以上是关于第二周作业的主要内容,如果未能解决你的问题,请参考以下文章

第二周作业

20165306课下作业(第二周)

第二周作业

第二周作业

软件项目管理第二周作业

软件过程与项目管理第二周作业