无法在Servlet中设置ResultSet的属性

时间:2014-11-11 21:54:33

标签: java jsp servlets jdbc setattribute

在我的项目中,我将查询结果从数据库中获取到我的servlet中,并在设置ResultSet的属性后将结果传递给JSP,然后在JSP中访问它。但不知怎的,我可以设置并访问除ResultSet之外的JSP和servlet中的所有其他属性。

所以这是我的数据库访问函数getcart()

public static ResultSet getCart(int item,int cust){
ResultSet rs=null,res=null;
String i_name;
int price;
try{
    rs=stmnt.executeQuery("SELECT i_name,price FROM items WHERE i_id="+item);
    rs.next();
    i_name=rs.getString(1);
    price=rs.getInt(2);
    stmnt.executeUpdate("INSERT INTO cart(prod,price,c_id,i_id) VALUES('"+i_name+"',"+price+","+cust+","+item+")");
    res=stmnt.executeQuery("SELECT prod,price,count(*) FROM cart WHERE c_id="+cust+" GROUP BY i_id"); 
    res.next();
}catch(SQLException e){}
return res;

}

这是JSP

<%ResultSet r=(ResultSet)request.getAttribute("cart");%>
<div id="pageContent">
        <div style="margin:24px; text-align:left;"><br />
        <table width="100%" border="2" cellspacing="0" id ="table1">
            <tr>
            <td width="15%" bgcolor="#000000" align="center"><strong>Product</strong></td>
            <td width="10%" bgcolor="#000000" align="center"><strong>Price</strong></td>
            <td width="12%" bgcolor="#000000" align="center"><strong>Quantity</strong></td>
            <!--<td width="9%" bgcolor="#000000" align="center"><strong>Total</strong></td>-->
            </tr>
            <%while(r.next()){%>
            <tr class="spaceUnder">
                <td width="15%" bgcolor="#FFFFFF" align="center"><font color="#000"> <%=re.getString(1)%></font></td>
                    <td width="10%" bgcolor="#FFFFFF" align="center"><font color="#000"> <%=re.getInt(2)%></font></td>
            <td width="12%" bgcolor="#FFFFFF" align="center"><font color="#000"> <%=re.getInt(3)%> </font></td>
            </tr>
            <%}%>
        </table> 
            <div class="container">
        <left><h3 style="color:#FFFFF;padding-top:30px;"><font color="#000">Total: <%=total%> </font></h3></left>
            </div>
        </div>
</div>

这是servlets片段:

                res=accessDB.getCart(it,ci);
                request.setAttribute("cart",res);
                view=request.getRequestDispatcher("cart.jsp");
                view.forward(request, response);         

我不知道发生了什么事?我现在花了很多时间在这上面。我的数据库不是空的。所以res.next()是有效的。

有一件事是有效的。当我使用ResultSetgetInt分解我的servlet代码中的getString时,然后将它们单独发送到JSP而不是发送整个{{1}在JSP中然后ResultSet工作,我可以打印我的结果。但是不知道为什么整个getAttribute没有。我正在使用Netbeans 8.0.1。

请帮助。

1 个答案:

答案 0 :(得分:0)

根据我的观察,我认为您的查询SELECT prod,price,count(*) FROM cart WHERE c_id="+cust+" GROUP BY i_id只返回一行。

首先,您不应在返回res.next();对象之前使用RESULTSET。 这是设计函数的错误方法。 getCart(int item,int cust)应该做的只是返回RESULTSET

我假设的问题似乎在于,您的query只返回一行。 在返回res.next();对象之前调用RESULTSETresultset cursor已经指向结果的第一行。

当您致电<%while(r.next()){%>时,此时会收到NULL,因为结果集中的下一行不存在。 这就是无法打印结果的原因。


我现在观察到你在jsp代码中输入了一个拼写错误。 <%=re.getString(1)%>应该是<%=r.getString(1)%>,因为您正在创建名为 <%ResultSet r=(ResultSet)request.getAttribute("cart");%>的{​​{1}} Resultset变量,但您正在使用r。 但文件中不存在re。我认为JSP甚至不应该编译,因为永远不会定义re变量。

re无效。