2017-01-27 1 views
-2

Я работаю над простым домашним веб-приложением, использующим Java EE, Servlets, JSP и MySQL. Мои Create, Read и Delete работают нормально, но Update не работает. Я не использую какие-либо формы дизайна, просто сервлеты и POJO. Все примеры, которые я пытаюсь изучить, похоже, использовали шаблоны проектирования MVC и DAO. Есть ли способ получить приложение CRUD без использования шаблонов MVC и DAO? Какая рекомендуемая и лучшая практика для такого простого приложения?Веб-приложение CRUD в Java с сервлетом, JSP и MySQL без DAO

здесь код: UpdateBook.jsp

<%@ page language="java" contentType="text/html; charset=gbk" 
    pageEncoding="gbk"%> 
<%@ page import ="java.util.ArrayList"%> 
<%@page import="book.Book"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gbk"> 
<link rel="stylesheet" type="text/css" href="../css/styles.css" /> 
<title>Updated Library Collection</title> 
</head> 
<body> 
<div id="container"> 
<div id="header"><h1 align="center" style="color:blue">Edit Library Collection</h1></div> 
    <div id="wrapper"> 
    <div id="content" align="center"> 
      <% 
       request.setCharacterEncoding("gbk");  
       String ISBN=request.getParameter("Isbn"); 
       String BookTitle=request.getParameter("Title"); 
       String BookAuthor=request.getParameter("Author"); 
       String Category=request.getParameter("Category"); 
       String Description=request.getParameter("Description");     
      %> 
     <table width="100%" border="0" cellspacing="0" cellpadding="4" align="center" >  
      <tr> 

      <td width="100%" bgcolor="#EAEAEA" colspan="2"> 

       <form name="bookUpdate" action="/homelibrary/UpdateBookServlet" method="POST"> 
       <p> 
        <label for="Isbn">ISBN: </label> 
        <input type="text"readonly name="Isbn" id="Isbn" value=<%=ISBN%> > 
        <br><br> 
        <label for="Title">Title: </label> 
        <input type="text" name="Title" id="Title" value=<%=BookTitle%>> 
        <br><br> 
        <label for="Author">Author: </label> 
        <input type="text" name="Author" id="Author" value=<%=BookAuthor%>> 
        <br><br> 
        <label for="Category">Category: </label> 
        <input type="text" name="Category" id="Category" value=<%=Category%>> 
        <br><br> 
        <label for="Description">Description: </label> 
        <input type="text" name="Description" id="Description" value=<%=Description%>> 
        <br><br>    
        <p> 
        <input type="submit" name="Submit" value="Submit" onclick="goto"> 
        <input type="button" name="Cancel" value="Cancel" onclick="javascript:history.go(-1);"> 
       </p> 
      </form>   
      </td>  
      </tr>  
     </table> 
    </div> 
    </div> 
    <div id="footer" align="center"> 
      <p>&copy; Home Library</p> 
    </div> 
</body> 
</html> 

UpdateBookServlet.java

package book; 
import java.io.IOException; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

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

    private static final long serialVersionUID = 1L;   
    public UpdateBookServlet(){ 
     super();   
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     //String forward=""; 
     String action = request.getParameter("action"); 

     if (action == ("edit")){ 

      String Isbn = request.getParameter("Isbn"); 
      Book book = null; 
      try { 
       book = this.getBookByIsbn(Isbn); 
      } catch (ClassNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      request.setAttribute("book", book);   
     } 

     RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/Book/UpdateBook.jsp"); 
     dispatcher.forward(request,response); 
    } 



    //@SuppressWarnings("unused") 
    public void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     Book book = new Book(); 
     response.setContentType("text/html"); 
     request.setCharacterEncoding("gbk"); 
     //Get data from form data 
     String ISBN = request.getParameter("Isbn"); 
     String BookTitle = request.getParameter("Title"); 
     String BookAuthor = request.getParameter("Author"); 
     String Category = request.getParameter("Category"); 
     String Description = request.getParameter("Description"); 


     //@SuppressWarnings("unused") 
     //PreparedStatement preStmt = null; 
     //Connection cn =null; 
     try { 

      //Create a java MySQL database connection 
      Class.forName("com.mysql.jdbc.Driver"); 
      String url = "jdbc:mysql://localhost:3306/ebookstore"; 
      Connection cn = DriverManager.getConnection(url, "admin", "admin"); 
      PreparedStatement prepStmt= null; 
      if(ISBN != null) 
      // create the java MySQL update PreparedStatement 
      prepStmt = cn.prepareStatement("UPDATE book SET Title=?,Author=?,Category=?,Description=? "+" where Isbn=?"); 
      //String update = "UPDATE book SET Title=?,Author=?,Category=?,Description=? "+" where Isbn=1111"; 
      //prepStmt = cn.prepareStatement(update); 
      prepStmt.setString(1, book.getTitle()); 
      prepStmt.setString(2, book.getAuthor()); 
      prepStmt.setString(3, book.getCategory()); 
      prepStmt.setString(4, book.getDescription()); 
      prepStmt.setInt(5, Integer.parseInt(book.getISBN())); 

      //execute the java preparedStatment 
      prepStmt.executeUpdate(); 
      cn.close(); 
      prepStmt.close(); 

     } catch (Exception e) { 
      System.err.println("Got an exception! "); 
      System.err.println(e.getMessage()); 
     } 

     //forwarding from Servlet to a JSP 
     RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/Book/QueryBook.jsp"); 
     dispatcher.forward(request,response); 

    } 

    public Book getBookByIsbn(String isbn) throws ClassNotFoundException { 
     Book book = new Book(); 
     try {   
      //Create a java MySQL database connection 
      Class.forName("com.mysql.jdbc.Driver"); 
      String url = "jdbc:mysql://localhost:3306/homelib"; 
      Connection cn = DriverManager.getConnection(url, "root", "admin"); 
      PreparedStatement preparedStatement = cn. 
        prepareStatement("SELECT * FROM book where Isbn=?"); 
      preparedStatement.setString(1, isbn); 
      ResultSet rs = preparedStatement.executeQuery(); 
      if (rs.next()) { 
       book.setISBN(rs.getString("Isbn")); 
       book.setTitle(rs.getString("Title")); 
       book.setAuthor(rs.getString("Author")); 
       book.setCategory(rs.getString("Category")); 
       book.setDescription(rs.getString("Description")); 
      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 

     return book; 
    }  
} 

Кнопка в QueryBook.jsp

<td><a href="/homelibrary/UpdateBookServlet?action=edit&Isbn=<c:out value="${book.Isbn}"/>">Update</a></td> 
+1

Рекомендуемая практика * заключается в использовании соответствующих шаблонов проектирования *. Тем не менее, используя шаблон дизайна или нет, сам по себе не влияет на то, будет ли обновление базы данных работать или нет. Вам нужно будет предоставить [mcve], если вам нужна помощь. –

+0

Есть мой сервлет и страница jsp. Страница обновления возвращает с нулевым значением для всех значений. – drochora

ответ

0

Вы сказали в своем комментарии:

Обновление страницы Возвращение с нулем для всех значений.

То есть, потому что вы intantiate объект книги В UpdateBookServlet.java

Book book = new Book(); 

но установить параметры запроса в отдельные строки объектов:

String ISBN = request.getParameter("Isbn"); 
    String BookTitle = request.getParameter("Title"); 
    String BookAuthor = request.getParameter("Author"); 
    String Category = request.getParameter("Category"); 
    String Description = request.getParameter("Description"); 

Но никогда не использовать их. Вместо этого вы добавляете данные из пустого объекта книги:

 prepStmt.setString(1, book.getTitle()); 
     prepStmt.setString(2, book.getAuthor()); 
     prepStmt.setString(3, book.getCategory()); 
     prepStmt.setString(4, book.getDescription()); 
     prepStmt.setInt(5, Integer.parseInt(book.getISBN())); 
Смежные вопросы