2014-11-11 3 views
0

내 프로젝트에서 데이터베이스의 쿼리 결과를 내 서블릿으로 가져오고 ResultSet에 대한 속성을 설정 한 다음 결과를 JSP로 전달한 다음 JSP로 액세스합니다.하지만 어떻게 든 ResultSet을 제외하고 JSP와 서블릿에서 다른 모든 속성을 설정하고 액세스 할 수 있습니다.Servlet에서 ResultSet의 속성을 설정할 수 없습니다

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

을 내가 무엇을 잘 모릅니다 : 그래서 여기

는 서블릿 스 니펫되고 여기에 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> 

이며, 여기 내 데이터베이스 액세스 기능의 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; 

} 

입니다 이 일어나고있다?? 이제는 이것에 많은 시간을 보냈습니다. 그리고 데이터베이스가 비어 있지 않습니다. 그래서 res.next()가 유효합니다.

한 가지 내가 getIntgetString를 사용하여 내 서블릿 코드에서 내 ResultSet을 분해 working.When이며, 다음 JSP에 다음을 보내 개별적으로 대신 작동 JSP에서 전체 ResultSet, 다음 getAttribute를 보내고 난 내 결과를 인쇄 할 수 있습니다. 하지만 전체가 ResultSet이 아닌 이유를 모르겠습니다. Netbeans 8.0.1을 사용하고 있습니다.

도와주세요.

+0

'session.setAttribute ("cart", res);'(request.getSession(). setAttribute ("cart");'를 실행하여 HttpSession을 얻을 수있다. JSP처럼'session.getAttribute ("cart");'와 같은 검색 후 JSP에서 세션에서 그것을 제거하십시오. – brso05

+4

당신은 결과 집합을 사용해서는 안됩니다. – Hannes

+0

JVM에서 메모리 누수를 속일 방법을 찾고 있습니까? 네가 성공했기 때문에. –

답변

0

제 생각에는 귀하의 Query SELECT prod,price,count(*) FROM cart WHERE c_id="+cust+" GROUP BY i_id은 하나의 행만 리턴한다고 생각합니다.

먼저 RESULTSET 개체를 반환하기 전에 res.next();을 사용하면 안됩니다. 이것은 잘못된 함수 설계 방법입니다. getCart(int item,int cust)이 수행해야하는 것은 RESULTSET입니다.

내가 여기 있다고 생각되는 문제는 귀하의 query이 단지 하나의 행을 반환한다는 것입니다. RESULTSET 개체를 반환하기 직전에 res.next();으로 전화를 걸기. resultset cursor은 이미 결과의 첫 번째 행을 가리 킵니다.

<%while(r.next()){%>을 호출 할 때 결과 집합의 다음 행이 존재하지 않기 때문에 이번에는 NULL이됩니다. 그 이유는 결과를 인쇄 할 수 없기 때문입니다.


jsp 코드에서 오타를 만들었습니다. 당신이r 이름 <%ResultSet r=(ResultSet)request.getAttribute("cart");%>결과 집합 변수를 만들하지만 당신은 re을 사용하는 beacause를 <%=re.getString(1)%> 무엇이어야하는 것은 <%=r.getString(1)%>입니다. 그러나 re 파일에 존재하지 않습니다. re 변수가 정의되지 않았기 때문에 JSP도 컴파일해서는 안된다.

s the reason it이 작동하지 않습니다.

+0

그룹 행을 수행 한 후에도 대답을 줄 수있는 행이 충분합니다. 서블릿에서 예외를 인쇄하려면 어떻게해야합니까? 처음에 두 행을 넣었으나 2 행 이상이 있어야 제대로 작동합니다. 나는 그것을 테스트했지만 작동하지 않았다. – awhitesong

+0

[질문 1] (http://stackoverflow.com/questions/6182771/how-to-properly-handle-exceptions-in-a-jsp-servlet-app) [Quetion 2] (http : // stackoverflow .com/questions/8135980/how-can-i-print-error-stack-trace-in-jsp-page) jsp에서 인쇄 예외에 대해 읽을 수 있습니다. –

+0

내 대답을 편집했습니다. 코드에 오타가 있습니다. 이제는 효과가있다. –

관련 문제