如何使用多个 ResultSet 循环
How to loop with multiple ResultSet
我想复制上图所示的内容
所以我考虑使用嵌套 while
循环,每个循环使用 ResultSet
访问数据库中的不同表显示在下面的代码
<%
String Query2 = "SELECT * FROM transaction";
rs = st.executeQuery(Query2);
%>
<h2 align="center">Member</h2>
<%
while(rs.next())
{
%>
<table bgcolor="#000000" align="center" cellspacing="10px">
<tr>
<th>Transaction ID</th>
<th>Transaction Date</th>
<th>Costumer Name</th>
<th> </th>
</tr>
<tr>
<td><%=rs.getString("Transaction_ID")%></td>
<td><%=rs.getString("Transaction_Date")%></td>
<td><%=rs.getString("User_Name")%></td>
<td> </td>
</tr>
<%
String Query3 = "SELECT * FROM list WHERE User_Name = '"+rs.getString("User_Name")+"' AND Date = '"+rs.getString("Transaction_Date")+"'";
ResultSet rs2 = st.executeQuery(Query3);
while(rs2.next())
{
%>
<tr>
<td>Product</td>
<td>Quantity</td>
<td>Price</td>
<td>Total</td>
</tr>
<tr>
<td><img src="Picture/<%=rs.getString("Image")%>"></td>
<td><%=rs.getString("Quantity")%></td>
<td><%=rs.getString("Price")%></td>
<td><%=rs.getString("Total")%></td>
</tr>
<%
}
%>
</table>
<br/>
<%
}
%>
但我收到一条错误消息 javax.servlet.ServletException: java.sql.SQLException: Operation not allowed after ResultSet closed
所以我尝试为 ResultSet
使用另一个变量 rs2
但我仍然收到相同的错误消息
我该如何解决这个问题?或者我可以使用其他方法来做到这一点吗?
我在这里使用的 2 个表在字段 User_Name 和 Transaction_Date 上具有相同的值,如 Query3
所示
正如我所见,您对这两个查询使用了相同的 Statement 对象。正如文档 (http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html) 所说,默认情况下,每个 Statement 对象只能同时打开一个 ResultSet 对象。因此,如果一个 ResultSet 对象的读取与另一个 ResultSet 对象的读取交织在一起,则每个对象都必须由不同的 Statement 对象生成。如果存在打开的对象,Statement 接口中的所有执行方法都会隐式关闭语句的当前 ResultSet 对象。
我想复制上图所示的内容
所以我考虑使用嵌套 while
循环,每个循环使用 ResultSet
访问数据库中的不同表显示在下面的代码
<%
String Query2 = "SELECT * FROM transaction";
rs = st.executeQuery(Query2);
%>
<h2 align="center">Member</h2>
<%
while(rs.next())
{
%>
<table bgcolor="#000000" align="center" cellspacing="10px">
<tr>
<th>Transaction ID</th>
<th>Transaction Date</th>
<th>Costumer Name</th>
<th> </th>
</tr>
<tr>
<td><%=rs.getString("Transaction_ID")%></td>
<td><%=rs.getString("Transaction_Date")%></td>
<td><%=rs.getString("User_Name")%></td>
<td> </td>
</tr>
<%
String Query3 = "SELECT * FROM list WHERE User_Name = '"+rs.getString("User_Name")+"' AND Date = '"+rs.getString("Transaction_Date")+"'";
ResultSet rs2 = st.executeQuery(Query3);
while(rs2.next())
{
%>
<tr>
<td>Product</td>
<td>Quantity</td>
<td>Price</td>
<td>Total</td>
</tr>
<tr>
<td><img src="Picture/<%=rs.getString("Image")%>"></td>
<td><%=rs.getString("Quantity")%></td>
<td><%=rs.getString("Price")%></td>
<td><%=rs.getString("Total")%></td>
</tr>
<%
}
%>
</table>
<br/>
<%
}
%>
但我收到一条错误消息 javax.servlet.ServletException: java.sql.SQLException: Operation not allowed after ResultSet closed
所以我尝试为 ResultSet
使用另一个变量 rs2
但我仍然收到相同的错误消息
我该如何解决这个问题?或者我可以使用其他方法来做到这一点吗?
我在这里使用的 2 个表在字段 User_Name 和 Transaction_Date 上具有相同的值,如 Query3
正如我所见,您对这两个查询使用了相同的 Statement 对象。正如文档 (http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html) 所说,默认情况下,每个 Statement 对象只能同时打开一个 ResultSet 对象。因此,如果一个 ResultSet 对象的读取与另一个 ResultSet 对象的读取交织在一起,则每个对象都必须由不同的 Statement 对象生成。如果存在打开的对象,Statement 接口中的所有执行方法都会隐式关闭语句的当前 ResultSet 对象。