2015-05-09 34 views
0

我的UpdateProducts方法更新我的SQL中的產品我的Web應用程序中的表格無法正常工作,我找不到原因。我真的很困惑,因爲我複製了上一個工作示例中的代碼,並且剛剛更改了它連接的數據庫(我已經更改了Servlet(ProductAdminController)和Model(ProductDB)中的必需代碼,但我無法獲取這個UpdateMethod可以工作,數據庫不包含任何會阻礙這種方法的外鍵,而且我的displayProducts/displayProduct和deleteProduct方法也能工作,只是我的UpdateProduct方法不起作用,每當我點擊更新按鈕時,就會出現這個錯誤:SQL數據庫更新方法無法在JavaEE Web應用程序中工作

"type Exception report 

message 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

java.lang.NullPointerException 
sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1017) 
java.lang.Double.parseDouble(Double.java:540) 
music.admin.ProductAdminController.updateProduct(ProductAdminController.java:111) 
music.admin.ProductAdminController.doPost(ProductAdminController.java:64) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:644) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
note The full stack trace of the root cause is available in the Apache Tomcat/8.0.3 logs" 

我已經看了有明顯錯誤,無法找到任何。

ProductAdminController

import java.io.*; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 
import javax.servlet.*; 
import javax.servlet.ServletException; 
import javax.servlet.http.*; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import music.business.Product; 
import music.data.ProductDB; 

public class ProductAdminController extends HttpServlet { 


    @Override 
    public void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 



    // get current action 
    String action = request.getParameter("action"); 
    if (action == null) { 
     action = "displayProducts"; // default action 
    } 

    String requestURI = request.getRequestURI(); 
    String url = "/index.jsp"; 
    if (action.equals("displayProducts")) { 
     url = displayProducts(request, response); 
    } else if (action.equals("displayProduct")) { 
     url = displayProduct(request, response); 
    } else if (action.equals("addProduct")) { 
     url = "/product.jsp"; 
    } else if (action.equals("deleteProduct")) { 
     url = deleteProduct(request, response); 
    } 
    getServletContext() 
      .getRequestDispatcher(url) 
      .forward(request, response); 
    } 

    @Override 
    public void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    // get current action 
    String action = request.getParameter("action"); 
    if (action == null) { 
     action = "displayProducts"; // default action 
    } 
    String requestURI = request.getRequestURI(); 
    // perform action and set URL to appropriate page 
    String url = "/index.jsp"; 
    if (action.equals("updateProduct")) { 
     url = updateProduct(request, response); 
    } else if (action.equals("deleteProduct")) { 
     url = deleteProduct(request, response); 
    } 
    getServletContext() 
      .getRequestDispatcher(url) 
      .forward(request, response); 
    } 

    private String displayProducts(HttpServletRequest request, 
     HttpServletResponse response) { 

    List<Product> products = ProductDB.selectProducts(); 
    request.setAttribute("products", products); 
    return "/products.jsp"; 
    } 

    private String displayProduct(HttpServletRequest request, 
     HttpServletResponse response) { 

    String productCode = request.getParameter("productCode"); 
    Product product; 
    if (productCode == null || productCode.isEmpty()) { 
     product = new Product(); 
    } else { 
     product = ProductDB.selectProduct(productCode); 
    } 

    request.setAttribute("product", product); 
    return "/product.jsp"; 
    } 

    private String addProduct(HttpServletRequest request, 
     HttpServletResponse response) { 

    return "/product.jsp"; 
} 

private String updateProduct(HttpServletRequest request, 
     HttpServletResponse response) { 

    String Code = (String) request.getParameter("Code"); 
    String description = (String) request.getParameter("Description"); 
    String priceString = (String) request.getParameter("Cost"); 

    double price; 
    try { 
     price = Double.parseDouble(priceString); 
     System.out.print(price); 
    } catch (NumberFormatException e) { 

     price = 0; 
    } 

    Product product = (Product) request.getAttribute("product"); 
    if (product == null) { 
     product = new Product(); 
    } 
    product.setCode(Code); 
    product.setDescription(description); 
    product.setPrice(price); 
    request.setAttribute("product", product); 

    String message = ""; 
    if (product.getPrice() <= 0) { 
     message = "You must enter a positive number for the price without " 
       + "any currency symbols."; 
    } 
    if (product.getDescription().length() == 0) { 
     message = "You must enter a description for the product."; 
    } 
    if (product.getCode().length() == 0) { 
     message = "You must enter a code for the product."; 
    } 
    request.setAttribute("message", message); 

    String url; 
    if (message.isEmpty()) { 
     if (ProductDB.selectProduct(product.getCode()) != null) { 
      ProductDB.updateProduct(product); 
     } else { 
      ProductDB.insert(product); 
     } 
     url = displayProducts(request, response); 
    } else { 
     url = "/product.jsp"; 
    } 
    return url; 
} 

private String deleteProduct(HttpServletRequest request, 
     HttpServletResponse response) { 

    String productCode = request.getParameter("productCode"); 
    Product product = ProductDB.selectProduct(productCode); 
    request.setAttribute("product", product); 

    String url; 
    String yesButton = request.getParameter("yesButton"); 
    if (yesButton != null) { 
     ProductDB.delete(product); 
     url = displayProducts(request, response); 
    } else { 
     url = "/confirm_product_delete.jsp"; 
    } 
    return url; 
}  
} 

ProductDB類

import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.ArrayList; 
import java.util.List; 
import music.business.Product; 

/** 
* 
* @author J 

public class ProductDB { 
public static int insert(Product product) { 
    ConnectionPool pool = ConnectionPool.getInstance(); 
    Connection connection = pool.getConnection(); 
    PreparedStatement ps = null; 

    String query 
      = "INSERT INTO Products (Code, Description, Cost) " 
      + "VALUES (?, ?, ?)"; 
    try { 
     ps = connection.prepareStatement(query); 
     ps.setString(1, product.getCode()); 
     ps.setString(2, product.getDescription()); 
     ps.setDouble(3, product.getPrice()); 
     return ps.executeUpdate(); 
    } catch (SQLException e) { 
     System.out.println(e); 
     return 0; 
    } finally { 
     DBUtil.closePreparedStatement(ps); 
     pool.freeConnection(connection); 
    } 
} 

public static int updateProduct(Product product) { 
    ConnectionPool pool = ConnectionPool.getInstance(); 
    Connection connection = pool.getConnection(); 
    PreparedStatement ps = null; 

    String query = "UPDATE Products SET " 
      + "Description = ?, " 
      + "Cost = ? " 
      + "WHERE Code = ?"; 
    try { 
     ps = connection.prepareStatement(query); 
     ps.setString(1, product.getCode()); 
     ps.setString(2, product.getDescription()); 
     ps.setDouble(3, product.getPrice()); 

     return ps.executeUpdate(); 
    } catch (SQLException e) { 
     System.out.println(e); 
     return 0; 
    } finally { 
     DBUtil.closePreparedStatement(ps); 
     pool.freeConnection(connection); 
    } 
} 

public static int delete(Product product) { 
    ConnectionPool pool = ConnectionPool.getInstance(); 
    Connection connection = pool.getConnection(); 
    PreparedStatement ps = null; 

    String query = "DELETE FROM Products " 
      + "WHERE Code = ?"; 
    try { 
     ps = connection.prepareStatement(query); 
     ps.setString(1, product.getCode()); 

     return ps.executeUpdate(); 
    } catch (SQLException e) { 
     System.out.println(e); 
     return 0; 
    } finally { 
     DBUtil.closePreparedStatement(ps); 
     pool.freeConnection(connection); 
    } 
} 

public static boolean emailExists(String code) { 
    ConnectionPool pool = ConnectionPool.getInstance(); 
    Connection connection = pool.getConnection(); 
    PreparedStatement ps = null; 
    ResultSet rs = null; 

    String query = "SELECT Code FROM Products " 
      + "WHERE Code = ?"; 
    try { 
     ps = connection.prepareStatement(query); 
     ps.setString(1, code); 
     rs = ps.executeQuery(); 
     return rs.next(); 
    } catch (SQLException e) { 
     System.out.println(e); 
     return false; 
    } finally { 
     DBUtil.closeResultSet(rs); 
     DBUtil.closePreparedStatement(ps); 
     pool.freeConnection(connection); 
    } 
} 

    public static Product selectProduct(String productCode) { 
    ConnectionPool pool = ConnectionPool.getInstance(); 
    Connection connection = pool.getConnection(); 
    PreparedStatement ps = null; 
    ResultSet rs = null; 

    String query = "SELECT * FROM Products " 
      + "WHERE Code = ?"; 
    try { 
     ps = connection.prepareStatement(query); 
     ps.setString(1, productCode); 
     rs = ps.executeQuery(); 
     if (rs.next()) { 
      Product p = new Product(); 
      p.setCode(rs.getString("Code")); 
      p.setDescription(rs.getString("Description")); 
      p.setPrice(rs.getDouble("Cost")); 
      return p; 
     } else { 
      return null; 
     } 
    } catch (SQLException e) { 
     System.err.println(e); 
     return null; 
    } finally { 
     DBUtil.closeResultSet(rs); 
     DBUtil.closePreparedStatement(ps); 
     pool.freeConnection(connection); 
    } 
} 
     //This method returns null if a product isn't found. 
public static Product selectProduct(long productID) { 
    ConnectionPool pool = ConnectionPool.getInstance(); 
    Connection connection = pool.getConnection(); 
    PreparedStatement ps = null; 
    ResultSet rs = null; 

    String query = "SELECT * FROM Products " 
      + "WHERE Code = ?"; 
    try { 
     ps = connection.prepareStatement(query); 
     ps.setLong(1, productID); 
     rs = ps.executeQuery(); 
     if (rs.next()) { 
      Product p = new Product(); 
      p.setCode(rs.getString("Code")); 
      p.setDescription(rs.getString("Description")); 
      p.setPrice(rs.getDouble("Cost")); 
      return p; 
     } else { 
      return null; 
     } 
    } catch (SQLException e) { 
     System.err.println(e); 
     return null; 
    } finally { 
     DBUtil.closeResultSet(rs); 
     DBUtil.closePreparedStatement(ps); 
     pool.freeConnection(connection); 
    } 
} 

//This method returns null if a product isn't found. 
public static List<Product> selectProducts() { 
    ConnectionPool pool = ConnectionPool.getInstance(); 
    Connection connection = pool.getConnection(); 
    PreparedStatement ps = null; 
    ResultSet rs = null; 

    String query = "SELECT * FROM Products"; 
    try { 
     ps = connection.prepareStatement(query); 
     rs = ps.executeQuery(); 
     ArrayList<Product> products = new ArrayList<>(); 
     while (rs.next()) { 
      Product p = new Product(); 
      p.setCode(rs.getString("Code")); 
      p.setDescription(rs.getString("Description")); 
      p.setPrice(rs.getDouble("Cost")); 
      products.add(p); 
     } 
     return products; 
    } catch (SQLException e) { 
     System.err.println(e); 
     return null; 
    } finally { 
     DBUtil.closeResultSet(rs); 
     DBUtil.closePreparedStatement(ps); 
     pool.freeConnection(connection); 
    } 
} 

}

任何幫助將不勝感激!

JSP產品代碼

<%@page contentType="text/html" pageEncoding="utf-8"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="jr" uri="/WEB-INF/murach.tld" %> 

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Product Maintenance</title> 
    <link rel="stylesheet" href="<c:url value='/styles/main.css'/> "> 
</head> 
<body> 
    <h1>Product</h1> 
    <p><jr:ifEmptyMark color="blue" field=""/> marks required fields</p> 

    <p><i>${message}</i></p> 

    <form action="<c:url value='/productMaint'/>" 
      method="post" class="inline"> 
     <input type="hidden" name="action" value="updateProduct"> 

     <label class="pad_top">Code:</label> 
     <input type="text" name="productCode" id="codeBox" value="${product.code}"> 
     <jr:ifEmptyMark color="blue" field="${product.code}"/><br> 


     <label class="pad_top">Description:</label> 
     <input type="text" name="description" 
       value="${product.description}"> 
     <jr:ifEmptyMark color="blue" field="${product.description}"/><br> 

     <label class="pad_top">Price:</label> 
     <input type="text" name="price" id="priceBox" 
       value="${product.priceNumberFormat}"> 
     <jr:ifEmptyMark color="blue" field="${product.priceNumberFormat}"/><br> 

     <label class="pad_top">&nbsp;</label> 
     <input type="submit" value="Update Product" class="margin_left"> 
    </form> 

    <form action="<c:url value='/productMaint'/>" 
      method="get" class="inline"> 
     <input type="hidden" name="action" value="displayProducts"> 
     <input type="submit" value="View Products"> 
    </form> 

    </body> 
    </html> 

發現我的問題終於!簡直不敢相信我臉上的情況如何,而且我之前沒有看到!

String Code = (String) request.getParameter("Code"); 
    String description = (String) request.getParameter("Description"); 
    String priceString = (String) request.getParameter("Cost"); 

    product.setCode(Code); 
    product.setDescription(description); 
    product.setPrice(price); 
    request.setAttribute("product", product); 

應該是:

String productCode = (String) request.getParameter("productCode"); 
    String description = (String) request.getParameter("description"); 
    String priceString = (String) request.getParameter("price"); 

    product.setCode(productCode); 
    product.setDescription(description); 
    product.setPrice(price); 
    request.setAttribute("product", product); 
+0

priceString的值爲空 – MXrider19

回答

0
String query = "UPDATE Products SET " 
     + "Description = ?, " 
     + "Cost = ? " 
     + "WHERE Code = ?"; 
try { 
    ps = connection.prepareStatement(query); 
    ps.setString(1, product.getCode()); 
    ps.setString(2, product.getDescription()); 
    ps.setDouble(3, product.getPrice()); 

我覺得應該是

try { 
    ps = connection.prepareStatement(query); 
    ps.setString(1, product.getDescription()); 
    ps.setString(2, product.getPrice()); 
    ps.setDouble(3, product.getCode()); 

我看到更新查詢

0

傳遞錯誤的參數有一個問題您在updateProduct中獲得的成本值方法[ProductAdminController.java]。

似乎你沒有得到任何價值的成本參數,「price = Double.parseDouble(priceString)」導致NullPointerException異常。

嘗試打印以下值: String priceString =(String)request.getParameter(「Cost」);

+0

MXrider19 - 查看此信息並讓我們知道priceString的值。 – Rajesh

+0

當我調試時:String priceString =(String)request.getParameter(「Cost」);它顯示了我在我的web應用程序中爲代碼,描述和成本輸入的值,但是直接在我的print聲明中顯示:priceString = null – MXrider19

+0

請從提交請求的位置發佈完整的jsp代碼。 – Rajesh

相關問題