更新产品详细信息JDBC Servlet

时间:2017-03-26 15:00:58

标签: java html mysql servlets jdbc

这是我的Servlet:

public class UpdateProductServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {
        String productID = (String) request.getParameter("productID");
        String productName = (String) request.getParameter("productName");
        String priceString = (String) request.getParameter("price");
        String description = (String) request.getParameter("description");

        double price;
        try {
            price = Double.parseDouble(priceString);
        } catch (Exception e) {
            price = 0;
        }

        HttpSession session = request.getSession();
        Product p = (Product) session.getAttribute("Product");

        p.setProductID(productID);
        p.setProductName(productName);
        p.setPrice(price);
        p.setDescription(description);

        String message = "";
        if (p.getPrice() <= 0) {
            message = "You must enter a positive number for the price without any currency symbols.";
        }
        if (p.getDescription().length() == 0) {
            message = "You must enter all required fields.";
        }
        if (p.getProductID().length() == 0) {
            message = "You must enter all required fields.";
        }
        if (p.getProductName().length() == 0) {
            message = "You must enter all required fields.";
        }
        request.setAttribute("message", message);

        String url = "";
        if (message.length() == 0) {
            if (UserDB.exists(p.getProductID())) {
                UserDB.update(p);
            } else {
                UserDB.insertProduct(p);
            }
            url = "/return_user_details.jsp"; //display products
        } else {
            url = "/return_user_details.jsp"; //products??
        }

        RequestDispatcher dispatcher
                = getServletContext().getRequestDispatcher(url);
        dispatcher.forward(request, response);
    }
}

这是我的UserDB中的一段代码:

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

        //This method updates the record with a matching email address.
        //It returns a value of 0 if the email address can't be found.
        String query = "UPDATE Product SET "
                + "ProductID = ?, "
                + "ProductName = ?,"
                + "ProductPrice = ?, "
                + "ProductDescription = ? "
                + "WHERE ProductID = ?";
        try {
            ps = connection.prepareStatement(query);
            ps.setString(1, product.getProductID());
            ps.setString(2, product.getProductName());
            ps.set
Double(3, product.getPrice());
            ps.setString(4, product.getDescription());
            return ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
            return 0;
        } finally {
            DBUtil.closeResultSet(rs);
            DBUtil.closePreparedStatement(ps);
            pool.freeConnection(connection);
        }
    }

最后这是堆栈跟踪:

    Warning:   StandardWrapperValve[UpdateProductServlet]: Servlet.service() for servlet UpdateProductServlet threw exception
java.lang.NullPointerException
at admin.UpdateProductServlet.doPost(UpdateProductServlet.java:34)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Thread.java:745)

显然问题出在p.setProductID(productID); 我得到的错误是java.lang.NullPointerException / HTTP Status 500 - Internal Server Error。我尝试调试代码,然后我看到这些值被插入到productID productName pricedescription中,所以我不知道这个问题是什么。

我已经完全插入产品了。我一直试图解决这一整天,我无法找到解决方案。如果有人能指出我哪里出错我会受到赞赏

我的连接池:

public class ConnectionPool
{
    private static ConnectionPool pool = null;
    private static DataSource dataSource = null;

    public synchronized static ConnectionPool getInstance()
    {
        if (pool == null)
        {
            pool = new ConnectionPool();
        }
        return pool;
    }

    private ConnectionPool()
    {
        try
        {
            InitialContext ic = new InitialContext();
            dataSource = (DataSource) ic.lookup("jdbc/onlineuserdb");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    public Connection getConnection()
    {
        try
        {
            return dataSource.getConnection();
        }
        catch (SQLException sqle)
        {
            sqle.printStackTrace();
            return null;
        }
    }

    public void freeConnection(Connection c)
    {
        try
        {
            c.close();
        }
        catch (SQLException sqle)
        {
            sqle.printStackTrace();
        }
    }
}

0 个答案:

没有答案