1

JSP、JSTL、サーブレット、および JavaBeans を使用して Web サイトを作成しています。

私のコードのある時点で、オブジェクトの ArrayList を使用しようとしていますが、奇妙なことが起こっています: 最初のオブジェクトを追加すると問題なく、2 番目のオブジェクトを追加すると 2 番目の場所に追加されますが、 index(0) のオブジェクトは、index(1) のオブジェクトと同じ値を取得します。

多分問題は

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

articleList は Article クラスの 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;
}

そして Article クラス

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

}
4

5 に答える 5

1

コードは他のコメントに従ってクリーンアップする必要がありますが、機能的には機能するはずです。

これが私が起こっていると思うことです。

コードには次の2行が含まれています。

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

そして、以下への対応する呼び出しはありません。

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

これは、オブジェクトに記事名が指定されていないことを意味します(作成者が指定されている場合でも)。同じ名前の記事を何らかの形でマージするリストを表示する前に、何らかの処理を行っているに違いありません。

デバッグの一般的なアプローチとして、デバッガーでコードを実行して実際に何が起こっているかを確認できるように、コードをモックアップすることをお勧めします(現在、システムには可動部分が非常に多いため、磨くのが難しいでしょう実際の問題について)。

現在の場合、これはWebコンテナの外部で1つのメソッドを実行し、デバッガーを使用して返されるリスト内のオブジェクトを確認するのと同じくらい簡単です。リスト内のオブジェクトは、実際には別々のオブジェクトであり、同じarticleNameプロパティを持っているだけであることがわかります。

于 2009-06-06T14:07:58.760 に答える
1

あなたは newArticle.setArticleAuthor を2回呼び出しています...それはあなたのリストの問題の一部ではないことは知っていますが、それは観察です。

于 2009-06-06T03:41:00.960 に答える
1

私はこの方法で試してみて、これが何をするか見てみたいと思います。

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++;
}
于 2009-06-06T03:46:35.143 に答える
0

コードは問題ないように見えますが、同じ値が両方のインデックスにあると思わせるリストをどのように表示していますか? おそらくあなたの問題はそのコードにあります。

于 2009-06-06T04:17:37.993 に答える
0

記事を読みながら同時にデータベースに記事を追加していますか? ストレージ エンジンによっては、更新中に読み取りに問題が発生する可能性があると思います。

于 2009-06-06T04:24:49.883 に答える