代码之家  ›  专栏  ›  技术社区  ›  Dmitris

阵列主义者的奇怪行为

  •  1
  • Dmitris  · 技术社区  · 17 年前

    我正在使用JSP、JSTL、servlets和JavaBeans编写一个网站。

    在代码的某一点上,我试图使用对象的数组列表,但发生了一件奇怪的事情:当我添加第一个对象时,它是好的;当我添加第二个对象时,它将其添加到第二个对象中,但索引(0)处的对象获得的值与索引(1)处的对象相同。

    可能有个问题在

    ArrayList<Article> articleList = new ArrayList<Article>();
    Article newArticle = new Article();
    

    因为ArticleList是项目类的ArrayList。

    有人能指出我做错了什么吗?

    以下是我的代码:

    public ArrayList<Article> getArticles()
    {
        baseIO mySql = new baseIO();
        ArrayList<Article> articleList = new ArrayList<Article>();
        int articleId = 0;
    
        try
        {
            String sql =
                "select * from jsp_blog_article order by article_id Desc Limit 3";
            con = (Connection)mySql.getConnection();
            pstmt = (PreparedStatement) con.prepareStatement(sql);
            ResultSet rs = pstmt.executeQuery();
            while (rs.next()) {
                Article newArticle = new Article();
                newArticle.setArticleAuthor(rs.getString("article_name"));
                newArticle.setArticleBody(rs.getString("article_body"));
                newArticle.setArticleAuthor(rs.getString("article_author"));
                newArticle.setArticleDate(rs.getString("article_date"));
                articleId = Integer.parseInt(rs.getString("article_id"));
                newArticle.setArticleId(String.valueOf(articleId));
                newArticle.setArticleComments(this.getCommentsNum(articleId));
                articleList.add(newArticle);
            }
            con.close();
            pstmt.close();
        }
        catch(Exception e)
        {
            return null;
        }
    
        return articleList;
    }
    

    还有文章课

    package objects;
    
    import java.io.Serializable;
    
    public class Article implements Serializable{
        private String articleName;
        private String articleBody;
        private String articleAuthor;
        private String articleComments;
        private String articleDate;
        private String articleId;
    
        public Article()
        {
    
        }
    
        // all the getters and setters in place, but it is too long
        // so i am not going to post them in forum
    
    }
    
    5 回复  |  直到 17 年前
        1
  •  1
  •   Bobby    17 年前

    我会用这种方法试试看这有什么用。

    int x = 0;
    while (rs.next()) {
        articleList.add(new Article());
        articleList.get(x).setArticleName(rs.getString("article_name"));
        articleList.get(x).setArticleBody(rs.getString("article_body"));
        articleList.get(x).setArticleAuthor(rs.getString("article_author"));
        articleList.get(x).setArticleDate(rs.getString("article_date"));
        articleList.get(x).setArticleId(rs.getString("article_id"));
        articleList.get(x).setArticleComments(this.getCommentsNum(articleId));
        x++;
    }
    
        2
  •  1
  •   Aaron    17 年前

    你给newArticle.setArticleAuthor打了两次电话…我知道这不是你的列表问题,但这是一个观察。

        3
  •  1
  •   Kevin Day    17 年前

    代码应该按照其他注释进行清理,但在功能上,它应该可以工作。

    这就是我想发生的事情。

    您的代码包含以下两行:

    newArticle.setArticleAuthor(rs.getString("article_name"));
    newArticle.setArticleAuthor(rs.getString("article_author"));
    

    没有相应的呼叫:

    newArticle.setArticleName(rs.getString("article_name"));
    

    这意味着您的对象没有指定项目名称(即使指定了作者)。我敢打赌你会先做一些处理 显示 以某种方式合并具有相同名称的项目的列表。

    作为调试的一般方法,我建议您模拟代码,以便在调试器中运行它,并查看实际情况(现在,您的系统有太多的活动部件,您很难深入研究实际问题)。

    在当前的情况下,这就像在Web容器外运行一个方法,并使用调试器查看返回列表中的对象一样简单。您会发现列表中的对象实际上是独立的对象——只是具有相同的ArticleName属性。

        4
  •  0
  •   objects    17 年前

    代码看起来很好,如何显示使您认为两个索引的值相同的列表?也许您的问题在于该代码。

        5
  •  0
  •   Adam Goode    17 年前

    您在读取项目时是否同时向数据库添加项目?我认为,根据您的存储引擎的不同,在进行更新时可能会出现阅读问题。

    推荐文章