2014-12-17 4 views
1

user에서 데이터를 가져 와서 데이터베이스에 저장하는 간단한 양식이 있습니다.서블릿의 JDBC

이 내 간단한 형태 :

<!DOCTYPE html> 
<html> 
<head> 
    <title> Database Insertion Form </title> 
</head> 
<body> 

</body> 
<h1> 
    <center> Phonebook</center> 
</h1> 
<Form method=post action="DbServlet"> 

    <pre> 
     Surname: <input type="text" name="Surname"> 
     Forename: <input type="text" name="Forenames"> 
     Phone number: <input type="text" name="PhoneNum"> 
    </pre> 
    <br><br> 
    <center><input type="submit" VALUE="Commit"></center> 
</Form> 
</html> 

그리고이 DbServlet 서블릿이다, 심지어 예외 나는 HTML 형태로 submit 버튼을 클릭

@WebServlet("/DbServlet") 
public class DbServlet extends HttpServlet { 

    private PreparedStatement ps; 
    private Connection connection; 
    private String URL = "jdbc:mysql://localhost/lib"; 

    @Override 
    public void init() throws ServletException { 
     super.init(); 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      connection = DriverManager.getConnection(URL, "root", "2323"); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
      System.exit(1); 
     } catch (ClassNotFoundException cnfe) { 
      cnfe.printStackTrace(); 
     } 
    } 

    public void doPost(HttpServletRequest request,HttpServletResponse response) 
             throws IOException, ServletException { 
     String surname, forenames, telNum; 
     surname = request.getParameter("Surname"); 
     forenames = request.getParameter("Forenames"); 
     telNum = request.getParameter("PhoneNum"); 
     response.setContentType("text/HTML"); 
     PrintWriter out = response.getWriter(); 

     out.println("<HTML>"); 
     out.println("<HEAD>"); 
     out.println("<TITLE>Servlet + JDBC</TITLE>"); 
     out.println("</HEAD>"); 
     out.println("<BODY>"); 
     String query = "INSERT INTO PhoneNums" 
       + " VALUES('" + surname + "','" 
       + forenames + "','" + telNum + "')"; 

     try { 
      ps = connection.prepareStatement(query); 
      ps.executeUpdate(); 
      JOptionPane.showMessageDialog(null, "Done"); 
     } catch (SQLException sqle) { 
      sqle.printStackTrace(); 
     } 

     out.println("</BODY>"); 
     out.println("</HTML>"); 
     out.flush(); 
    } 

    @Override 
    public void destroy() { 
     try { 
      connection.close(); 
     } catch (Exception ex) { 
      System.out.println(
        "Error on closing database!"); 
      ex.printStackTrace(); 
      System.exit(1); 
     } 
    } 
} 

은, 아무 일도 발생하지 않습니다!

MySQL 커넥터 jar 파일은 Tomcat의 lib 폴더에 있습니다.

+0

처럼 setXXX 방법을 사용하여 나중에 다음 쿼리 문자열에 ? 물음표를 사용할 수 있습니까? – Sarz

+1

Tomcat 로그 파일을보고 누락 된 예외를 찾을 수 있습니다 –

+0

주어진 제출 버튼을 클릭하면'doPost()'메소드가 제대로 호출 되었습니까? 다음은'

'의 잘못된 HTML 마크입니다. 'method = post'는 따옴표로 묶인'method = "post"'이어야합니다. – Tiny

답변

1

당신이 <Form method=post action="DbServlet">

을 쓴 당신은 당신의 방법 이름 (게시물)과 "" (큰 따옴표)를 작성하지 않은 내가 그러므로 방법은 양식 정의되지 않은 게시 할 추측하고 기본적으로 호출하는 오히려 doPost()

보다는 서블릿의 doGet() 방법은 그래서 같은 그것을 쓰기

<form method="post" action="DbServlet">

두 번째 제안은 다음과 같습니다.

코드에 PreparedStatement을 사용하고 있으므로 '을 따옴표로 묶어 관리 할 필요가 없습니다.

당신은 당신이 포스트 방법과 양식을 제출 setInt() 또는 setString

String query = "INSERT INTO PhoneNums VALUES (?, ?, ?)"; 
ps = connection.prepareStatement(query); 
ps.setString(1, surname); 
ps.setString(2, forenames); 
ps.setString(3, telNum); 
ps.executeUpdate(); 


// I believe all these three are strings 
+0

니스, 작동, 감사합니다. –

+0

@ user3808021 환영합니다 :) – gprathour

+0

@ user3808021 두 가지 제안 중 어느 것이 승자입니까? 그것이이 질문을 끝내기에 매우 관련있는 정보라는 것을 안다. 당신을 위해서가 아니라, 같은 문제에 대한 해답을 찾고있는 다른 사람들을 위해서. – Gimby

0

당신은 아마 업데이트 커밋해야합니다 같은

connection.commit(); 

을 파괴 (와의 Connection.close()) 서블릿이 (결코 어쩌면) 서비스에서 얻을 수없는 경우라고합니다. 양식에서

+0

연결이 기본적으로 자동 커밋이라고 생각합니다. – saikumarm

+0

그는 거래를 사용하지 않기 때문에 커밋이 필요하지 않습니다. –

+0

작동하지 않습니다 ..... –