2017-04-04 1 views
0

자바 코드 나는 업데이트 선택한 행 값으로 노력했지만 임 바운드 예외에서 매개 변수 인덱스를 받고. 어떤 제안? 진술은 정확합니다, 또한 누구도 왜 그것이 발생하는지 설명 할 수 있습니까? PreparedStatement에서매개 변수 인덱스가 범위를 벗어났습니다 (1> 매개 변수 개수, 0), 피하는 방법은 무엇입니까?</p> <p>

public class Editbook extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     PrintWriter out = response.getWriter(); 
     try { 
      String booktitle = request.getParameter("booktitle"); 
      String author = request.getParameter("author"); 
      String category = request.getParameter("category"); 
      String pages = request.getParameter("pages"); 
      String desc = request.getParameter("description"); 
      String isbn = request.getParameter("isbn"); 

      Connection con = Logincheck.getConnection(); 
      PreparedStatement ps = con.prepareStatement("update books set title ='"+booktitle+"', author ='"+author+"', category ='"+category+"', pages ='"+pages+"', description ='"+desc+"' where isbn ='"+isbn+"'"); 

      ps.setInt(1, Integer.parseInt(isbn)); 
      ps.setString(2, booktitle); 
      ps.setString(3, author); 
      ps.setString(4, category); 
      ps.setInt(5, Integer.parseInt(pages)); 
      ps.setString(6, desc); 

      int i = ps.executeUpdate(); 
      out.println("updated"); 
      System.out.println(i + "updated"); 
     } catch (Exception e) {System.out.println(e);} 

    } 

} 
+2

연결 및 SQL 매개 변수를 혼합합니다. –

답변

2

, 당신은 직접 매개 변수의 값을 넣고 어떤 ?을 사용하고 있지 않습니다. 당신이

ps.setInt(1, Integer.parseInt(isbn)); 

을 쓸 때 그래서이 문장은 지정된 값을 ?의 첫 번째 발생을 교체하는 것입니다. 그러나 ?이 없으므로 매개 변수 인덱스가 바운드 예외를 벗어납니다.

2

PreparedStatement을 만들고 매개 변수를 제공하는 경우 SQL에 적절하게 표시해야합니다. 지금은 전체 SQL을 연결 한 다음 제공 할 매개 변수가 없으므로 매개 변수를 제공 할 수 없습니다. 대신 각 매개 변수는? 귀하의 SQL에.

Connection con = Logincheck.getConnection(); 
PreparedStatement ps = con.prepareStatement("update books set title = ?, author = ?, category = ?, pages = ?, description = ? where isbn = ?"); 

ps.setString(1, booktitle); 
ps.setString(2, author); 
ps.setString(3, category); 
ps.setInt(4, Integer.parseInt(pages)); 
ps.setString(5, desc); 
ps.setInt(6, Integer.parseInt(isbn)); 

편집 : 다른 주에

코드는의 라인에 뭔가 (매개 변수의 순서에주의)이어야한다. 매개 변수를 사용하면 코드를 SQL 코드 삽입에 덜 취약하게 만들기 때문에 전체 SQL 문자열을 연결하는 것보다 여기에 게시 한 방법이 훨씬 더 바람직합니다.

-1

문제는 HttpServletRequest에 매개 변수가 없다는 것입니다.

if (request.getParameterMap().containsKey("booktitle")) { 
      String booktitle = request.getParameter("booktitle"); 
     } 

을 그리고 당신은 당신의 POST 요청을 구축하는 방법을 보여줍니다 그래서 당신은 내가 요청이 처음에는 매개 변수가 포함되어 있는지 확인하는 것이 좋습니다 다음에 액세스 할 여기

String booktitle = request.getParameter("booktitle"); 
      String author = request.getParameter("author"); 

을 액세스 할 수 없습니다.

+0

['getParameter()'] (http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getParameter (java.lang.String)) 매개 변수가 수행하는 경우 'null'을 반환합니다. 존재하지 않는다. – Andreas

관련 문제