50分求救!同一个JSP页面中为什么不能定义两个数据库结果集??

tzcsdn 2003-10-18 04:05:07
我要分别从两张不同的表中获取数据,在一张表中获得一条记录显示后,马上要从另外一张表上读取其他相应的记录来显示……再显示第一张表的下一条记录;JSP代码如下:
<% String sql=
"SELECT * FROM party";
String sql2=
"SELECT * FROM power";
ResultSet rs=stms.executeQuery(sql);
ResultSet rs2=stms.executeQuery(sql2);%>
<% while(rs.next()){
String name=rs.getString("partyName");%>
<div id="KB1Parent" class="parent"> <a href="#" onClick="expandIt('KB1'); return false" ><img src="fold.gif"
border=0><%=name%></a></div>
<div id="KB1Child" class="child">
<% while(rs2.next()){
String pow=rs2.getString("pow");%>
<a href="sample.htm" target="_blank" ><img src="list.gif" border=0 alt=""><img src="open.gif"
border=0><%=pow%></a><br>
<%};%>

<%};
stms.close();
conn.close(); %>

在浏览器上总是说:
Error 500--Internal Server Error
From RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1:
10.5.1 500 Internal Server Error

The server encountered an unexpected condition which prevented it from fulfilling the request
...全文
86 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaray 2003-10-19
  • 打赏
  • 举报
回复
因为你的rs2在读完rs的第一条记录后,指针已经指向尾记录之后了.
当再此执行while(rs2.next){ .. }时出现异常造成的.
roymand 2003-10-19
  • 打赏
  • 举报
回复
<% while(rs.next()){
String name=rs.getString("partyName");%>
<div id="KB<%=i%>Parent" class="parent"> <a href="#" onClick="expandIt('KB<%=i%>'); return false" ><img src="fold.gif"
border=0><%=name%></a></div>
<%i++;%>
<div id="KB<%=i%>Child" class="child">
<% while(rs2.next()){
String pow=rs2.getString("pow");%>
<a href="sample.htm" target="_blank" ><img src="list.gif" border=0 alt=""><img src="open.gif"
border=0><%=pow%></a><br>
<%};
rs2.beforeFirst();
};%>
yaray 2003-10-19
  • 打赏
  • 举报
回复
楼上的好建议!
p0913q 2003-10-19
  • 打赏
  • 举报
回复
赞成楼上这位老兄所说的.
我个人觉得如果在你第二个中仍然从数据库查一样的数据.不但麻烦,而且效果也很差.
我建议,你最好写一个第二个表的实体BEAN.从而将第二个表中的记录存放到此实体BEAN中.
以后当从第一个表中循环取记录时,就只需对此实体BEAN进行引用就行了.其执行的效果会要好些.
tzcsdn 2003-10-18
  • 打赏
  • 举报
回复
我在上面用的是一个双重循环,第一个表读一条,然后把另一张表的所有记录读出,在接着读第一张表的下一条。。。
tzcsdn 2003-10-18
  • 打赏
  • 举报
回复
非常感谢大家,我把代码改了一下,上面的问题解决了,但是为什么老是在显示出第一张表的第一条记录后就没了呢??

rs2中的内容根本就没有显示出来呀?

</script>
</font></p>

<%

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String sConnStr="jdbc:odbc:hjData";
Connection conn=DriverManager.getConnection(sConnStr);
java.sql.Statement stms=conn.createStatement();
java.sql.Statement stms2=conn.createStatement();
%>
<% String sql=
"SELECT * FROM party";
String sql2=
"SELECT * FROM power";
int i=1;
ResultSet rs=stms.executeQuery(sql);
ResultSet rs2=stms2.executeQuery(sql2);%>

<% while(rs.next()){
String name=rs.getString("partyName");%>
<div id="KB<%=i%>Parent" class="parent"> <a href="#" onClick="expandIt('KB<%=i%>'); return false" ><img src="fold.gif"
border=0><%=name%></a></div>
<%i++;%>
<div id="KB<%=i%>Child" class="child">
<% while(rs2.next()){
String pow=rs2.getString("pow");%>
<a href="sample.htm" target="_blank" ><img src="list.gif" border=0 alt=""><img src="open.gif"
border=0><%=pow%></a><br>
<%};
};%>

<script language="JavaScript">
if (NS4) {
firstEl = "KB1Parent";
firstInd = getIndex(firstEl);
arrange();
}
</script>
yaray 2003-10-18
  • 打赏
  • 举报
回复
用同一个Connection建立两个Statement,在分别用不同的Statement建立不同的ResultSet就可以了.

ResultSet rs1 = stms1.executeQuery(sql);
ResultSet rs2 = stms2.executeQuery(sql2);
wklcomputer 2003-10-18
  • 打赏
  • 举报
回复
用一个CONNECTION 建立两个STATEMENT 就可以了.
yynoo 2003-10-18
  • 打赏
  • 举报
回复
请是用两个数据库链接实例,如果使用一个,那么前一个结果集中的数据将被新的结果集替换,所以前一个结果集重的数据没有了。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧