【问题标题】:How to loop with multiple ResultSet [duplicate]如何循环使用多个 ResultSet [重复]
【发布时间】:2016-10-01 04:32:47
【问题描述】:


我想复制上面显示的图片上的内容
所以我正在考虑使用嵌套的 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 所示

【问题讨论】:

  • 您可以创建一个查询来从两个表中选择值,并且您将只有一个 ResultSet 对象可以循环。您应该查看 SQL JOIN 子句。
  • 我认为这个查询应该这样做SELECT transaction.*, list.* FROM transaction LEFT JOIN list ON transaction.User_Name = list.User_Name;
  • 我的建议是在不在 jsp 中的单个 java 类中执行数据库连接。还要通过 servlet 介于两者之间。那么应该会更好。

标签: java html jsp jdbc resultset


【解决方案1】:

正如我所见,您对两个查询都使用了相同的 Statement 对象。正如文档 (http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html) 所说,默认情况下,每个 Statement 对象只能同时打开一个 ResultSet 对象。因此,如果一个 ResultSet 对象的读取与另一个 ResultSet 对象的读取交错,则每个对象都必须由不同的 Statement 对象生成。 Statement 接口中的所有执行方法都会隐式关闭一个语句的当前 ResultSet 对象,如果存在打开的对象。

【讨论】:

    猜你喜欢
    • 2019-06-21
    • 2021-06-08
    • 2021-04-26
    • 2017-04-06
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    相关资源
    最近更新 更多