在我的项目中,我将查询结果从数据库中获取到我的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()是有效的。
有一件事是有效的。当我使用ResultSet
和getInt
分解我的servlet代码中的getString
时,然后将它们单独发送到JSP而不是发送整个{{1}在JSP中然后ResultSet
工作,我可以打印我的结果。但是不知道为什么整个getAttribute
没有。我正在使用Netbeans 8.0.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();
对象之前调用RESULTSET
。
resultset 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
无效。