Добавьте продукт в базу данных, используя Java Servlet / jsp - PullRequest
0 голосов
/ 15 апреля 2020

Не могли бы вы помочь мне решить это? Я не могу найти, что происходит. Я делаю веб-приложение, используя Java Сервлеты и JSP.

. Когда я пытаюсь добавить продукт, это отображается в URL: http://localhost: 8080 / ProductMaintenanceMdy / add? action = add & code = 8768 & description = mylove & price = 15.55 & Add + product = Submit

Поскольку в нем отображаются данные, введенные в URL, это означает, что форма в addProduct. jsp работает, но не работает. не сохраняете продукт в базе данных.

Не могли бы вы проверить, правильны ли мой код сервлета, код отображения и функция запроса для добавления? Не будь груб, я новичок.

// Код сервлета для добавления продукта

else  if (action.equals("addProducts"))  // this is for action inside display  
{
    url= "/addProducts.jsp";
}
else if (action.equals("add")) //this is for add inside sddProducts
{  
    String code= request.getParameter("code");
    String description= request.getParameter("description");
    Double price=Double.parseDouble(request.getParameter("price"));

    Product p= new Product();
    p.setCode(code);
    p.setDescription(description);
    p.setPrice(price);

    ProductDB.insertProduct(p); //implemented it inside productDB.java
    url="/addProducts.jsp";

}

// Web xml раздел отображения для добавления

<servlet-mapping>
        <servlet-name>ProdMaintAppServlet</servlet-name>
        <url-pattern>/add</url-pattern>
</servlet-mapping>

// метод внутри ProductDB (класс для функций запросов к базе данных)

public static void insertProduct(Product p) {

    ConnectionPool pool = ConnectionPool.getInstance();
    Connection connection = pool.getConnection();
    PreparedStatement ps = null;
    ResultSet rs = null;

    String query=" INSERT INTO productsMaintenance VALUES( '"+ p.getCode()+"','"+ p.getDescription()+"','"+ p.getPriceCurrencyFormat()+"' ) ";

    try {

        ps = connection.prepareStatement(query);
        rs = ps.executeQuery();

    }

    catch (SQLException e) {
        System.err.println(e);
    } finally {
        DBUtil.closeResultSet(rs);
        DBUtil.closePreparedStatement(ps);
        pool.freeConnection(connection);
    }
}

1 Ответ

1 голос
/ 15 апреля 2020

Вы можете узнать причину root с помощью , используя отладчик . Помимо этого, ниже приведены некоторые рекомендации, которые также могут помочь вам избавиться от проблемы.

Для SQL оператора языка манипулирования данными ( DML ), такого как INSERT , UPDATE или DELETE, вы должны использовать executeUpdate или execute .

Кроме того, ваша реализация PreparedStatement не отличается от Statement, то есть вы фактически не используете мощь и преимущества PreparedStatement. Это должно быть похоже на

String query = "INSERT INTO productsMaintenance (Code, Description, PriceCurrencyFormat) VALUES (?, ?, ?)";
ps = conn.prepareStatement(query);
ps.setString (1, p.getCode());
ps.setString (2, p.getDescription());
ps.setString (3, p.getPriceCurrencyFormat());

// execute the PreparedStatement
ps.execute();

Таким образом, вы можете предотвратить попытку SQL инъекции , а также избавиться от явной вставки ' до и после каждых данных.

Отметьте this , чтобы узнать больше об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...