我正在使用JSP,JSTL,Servlets和JavaBeans编写一个网站。
在我的代码的某一点上,我正在尝试使用对象的ArrayList,并且发生了一件奇怪的事情:当我添加第一个对象时它很好,当我添加第二个对象时,它会在第二个对象中添加它place,但index(0)处的对象获取的值与index(1)处的对象相同。
可能是
中的问题ArrayList<Article> articleList = new ArrayList<Article>();
Article newArticle = new Article();
由于articleList是Article class的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
}
答案 0 :(得分:1)
您正在调用newArticle.setArticleAuthor两次......我知道这不是您的列表问题的一部分,但这是一个观察。
答案 1 :(得分: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++;
}
答案 2 :(得分:1)
应该根据其他评论清理代码,但从功能上来说,它应该可以正常工作。
这就是我认为正在发生的事情。
您的代码中包含以下两行:
newArticle.setArticleAuthor(rs.getString("article_name"));
newArticle.setArticleAuthor(rs.getString("article_author"));
并且没有相应的电话:
newArticle.setArticleName(rs.getString("article_name"));
这意味着您的对象没有指定文章名称(即使指定了作者)。我敢打赌,在显示以某种方式合并具有相同名称的文章的列表之前,您正在进行某种处理。
作为调试的一般方法,我建议你模拟你的代码,这样你就可以在调试器中运行它并看看实际发生了什么(现在,你的系统有很多移动部件,这对于它来说很难你要磨练实际的问题。)
在当前的情况下,这就像在Web容器外部运行一个方法一样简单,并使用调试器来查看返回的列表中的对象。您会发现列表中的对象确实是单独的对象 - 只具有相同的articleName属性。
答案 3 :(得分:0)
代码看起来很好,你如何显示让你认为两个索引的值相同的列表?也许你的问题在于代码。
答案 4 :(得分:0)
您在阅读文章时是否同时向数据库添加文章?我认为,根据您的存储引擎,您可能会在更新过程中遇到问题。