集合问题加分100
问题在代码中已经写出
public Vector select(String title)
{// title是体育新闻,根据体育新闻查询出TitleName(标题名)和FilePath(要发布的文件的路径名)
// 把查询出来的加入secondBean 中,再把secondBean加入Vector集合并返回 到.jsp文件中
Vector v = new Vector();
try
{
System.out.println("data title=" + title);
String sql = "select * from SecondTitle where ParentTitle=?";
PreparedStatement pstmt = data.getConnectin().prepareStatement(sql);
pstmt.setString(1, title);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
secondBean.setTitleName(rs.getString("TitleName"));
secondBean.setFilePath(rs.getString("FilePath"));
v.addElement(secondBean);
/*
* for语句输出的结果 * secondBean==E:\Eclipse1/news/new/麦蒂缺阵姚明独揽21分
* 火箭主场狂胜欧洲冠军.htm" 第0次循环
*
* secondBean==E:\Eclipse1\news\new\雅虎体育-画报.mht 第0次循环
* secondBean==E:\Eclipse1\news\new\雅虎体育-画报.mht 第1次循环
*
* secondBean==E:\Eclipse1/news/new/麦蒂缺阵姚明独揽21分 火箭主场狂胜欧洲冠军.htm"
* 第0次循环 secondBean==E:\Eclipse1/news/new/麦蒂缺阵姚明独揽21分
* 火箭主场狂胜欧洲冠军.htm" 第1次循环
* secondBean==E:\Eclipse1/news/new/麦蒂缺阵姚明独揽21分 火箭主场狂胜欧洲冠军.htm"
* 第2次循环
*
* secondBean=E:\Eclipse1/news/new/麦蒂缺阵姚明独揽21分 火箭主场狂胜欧洲冠军.htm"
* secondBean=E:\Eclipse1/news/new/麦蒂缺阵姚明独揽21分 火箭主场狂胜欧洲冠军.htm"
* secondBean=E:\Eclipse1/news/new/麦蒂缺阵姚明独揽21分 火箭主场狂胜欧洲冠军.htm"
*
*
*
*
*
*/
int j = 0;
for (int i = 0; i < v.size(); i++)
{
System.out.println("secondBean=="
+ secondBean.getFilePath());
System.out.println("第" + i + "次循环");
}
System.out.println();
}
} catch (SQLException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
return v;//返回给调用它的对象
}
这是调用它的页面 <%
dataOperate data = new dataOperate();
String title = request.getParameter("title");
String tit = new String(title.getBytes("iso-8859-1"));
System.out.println("title=" + tit);
Vector v = data.select(tit);
//以下for语句应该输出如下:
//E:\Eclipse1/news/new/麦蒂缺阵姚明独揽21分 火箭主场狂胜欧洲冠军.htm"
//E:\Eclipse1\news\new\雅虎体育-画报.mht
//E:\Eclipse1/news/new/麦蒂缺阵姚明独揽21分 火箭主场狂胜欧洲冠军.htm"
// 但它确输出了如下
// secondBean=E:\Eclipse1/news/new/麦蒂缺阵姚明独揽21分 火箭主场狂胜欧洲冠军.htm"
/ condBean=E:\Eclipse1/news/new/麦蒂缺阵姚明独揽21分 火箭主场狂胜欧洲冠军.htm"
/ condBean=E:\Eclipse1/news/new/麦蒂缺阵姚明独揽21分 火箭主场狂胜欧洲冠军.htm"
for (int i = 0; i < v.size(); i++)
{
SecondLeveBean secondBean = (SecondLeveBean) v.get(i);
System.out.println("secondBean=" + secondBean.getFilePath());
}
for (int i = 0; i < v.size(); i++)
{
SecondLeveBean secondBean = (SecondLeveBean) v.elementAt(i);
% >
<a href=" <%=secondBean.getFilePath()% >" > <%=secondBean.getTitleName()% >
</a >
<br >
<%
}
% >
[解决办法]
while (rs.next())
{
//you sould new secondBean again
secondBean = new SecondBean(); //这里是关键
secondBean.setTitleName(rs.getString("TitleName"));
secondBean.setFilePath(rs.getString("FilePath"));
v.addElement(secondBean); //这里放的是secondBean对象的引用,如果上面不重新new一次,那么每次加进来的都是同一个引用,而上面每次都对引用设置新值,最终你得到的就都是最后一次被设置过的新值E:\Eclipse1/news/new/麦蒂缺阵姚明独揽21分 火箭主场狂胜欧洲冠军.htm", 所以,每次往vector追加元素时,必须重新new一个对象以获得不同的引用。
[解决办法]
while (rs.next())
{
secondBean.setTitleName(rs.getString("TitleName"));
secondBean.setFilePath(rs.getString("FilePath"));
里面加一句,如下:
while (rs.next())
{
secondBean = new SecondBean();
secondBean.setTitleName(rs.getString("TitleName"));
secondBean.setFilePath(rs.getString("FilePath"));