为什么不循环了?

来源:百度知道 编辑:UC知道 时间:2024/07/02 23:51:02
<%! String Time_Str, Man_Str,Forum_Mastor,Forum_id,sql;%>
<%
Connection con=yy.getConn();
Statement stmt=con.createStatement();
ResultSet rs=null;
sql="SELECT * FROM qita";

rs=stmt.executeQuery(sql);
while (rs.next())
{

Time_Str=rs.getString("title");
Man_Str=rs.getString("content");
Forum_id=rs.getString("qitaid");
Forum_Mastor=rs.getString("author");

int ab=Integer.parseInt(Forum_Mastor);
sql="select * from User where userid="+ab;
rs=stmt.executeQuery(sql);
while (rs.next())
{
String Author=rs.getString("username");

%>

<tr>
<td><%=Time_Str%></td>
<td height="25"><%=Man_Str%></td>
<td><%=Author%></td>
&

呵呵,rs.next();的底层实现知道吗?
它是指针,指针是单向的,到了终点就不能回了。

你在程序中将rs两次赋值,仔细看一下下面的简单结构:
rs=...;//第一次赋值
while(rs.next()){ //-----循环a

rs=...;//第二次赋值
while(rs.next()){//-----循环b

}
}
当第二个循环b结束的时候,rs已经到指针终点了,再会过来执行 a循环的时候,rs已经不是第一次赋的那个值,而是第二次赋的那个值,所以循环a执行一次就结束了

看明白了吧,解决方案应该也知道了

你这么写很危险的 在外面创建了一个rs并给他结果集 而且在里面又给这个rs重新指定了结果集 里面的rs遍历完毕之后 返回到外层循环 rs.next();使用的还是里面的结集的对象 因为在里面已经遍历完了 所以到外面的话 rs.next() 返回的当然是FALSE咯

<%! String Time_Str, Man_Str,Forum_Mastor,Forum_id,sql;%>
<%
Connection con=yy.getConn();
Statement stmt=con.createStatement();
ResultSet rs=null;
sql="SELECT * FROM qita";

rs=stmt.executeQuery(sql);
while (rs.next())
{

Time_Str=rs.getString("title");
Man_Str=rs.getString("content");
Forum_id=rs.getString("qitaid");
Forum_Mastor=rs.getString("author");