2014-12-17 3 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 Servlet:

@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); 
     } 
    } 
} 

Когда я нажал на кнопку submit в HTML форме, ничего не происходит, даже любое исключение!

Файл jar-файла для подключения к MySQL присутствует в папке lib Tomcat.

+0

Вы заполните форму с Post метода? – Sarz

+1

Вы можете посмотреть файлы журнала tomcat, чтобы найти пропущенное исключение –

+0

Является ли метод 'doPost()' вызван правильно, когда вы нажимаете кнопку отправки? Вот недопустимая HTML-надпись '

'. 'method = post' должен быть' method = "post" 'заключен в кавычки. – Tiny

ответ

1

В вашей форме вы написали <Form method=post action="DbServlet">

Вы не написали "" (двойные кавычки) с именем метода (пост), и я думаю, поэтому напишите метод не был определен для формы и по умолчанию он звонит doGet() метод сервлета, а не doPost()

Так писать, как,

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

Второе предложение, которое я хотел бы дать:

Как вы используете PreparedStatement в своем коде, поэтому вам не нужно обойтись ' одинарные кавычки для запроса.

Вы можете использовать ? знак вопроса в строке запроса, а затем в дальнейшем использовать setXXX методы как 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

Nice, Works, thanks. –

+0

@ user3808021 Ваш прием :) – gprathour

+0

@ user3808021 Но какой из двух предложенных предложений был победителем? Зная, что это очень важная информация, чтобы завершить этот вопрос. Не для вас, для других, которые приходят сюда искать ответ на ту же проблему. – Gimby

0

Вы, вероятно, нужно совершить обновление:

connection.commit(); 

как уничтожить (и connection.close()) вызывается, когда сервлет не выйти из сервиса (возможно, никогда).

+0

Я считаю, что соединение по умолчанию является автоматической фиксацией. – saikumarm

+0

Он не нуждается в фиксации, так как он не использует транзакции –

+0

Не работает ..... –