Не удалось вставить данные в базу данных с помощью PreparedStatement с помощью jsp
Я пытаюсь вставить данные в базу данных, используя PreparedStatement на основе ввода формы. Программа следует обычному порядку, когда пользователь нажимает кнопку "отправить" на странице оформления заказа (checkout.jsp), после чего форма перенаправляет его на файл response.jsp по желанию, но данные не вставляются. Когда пользователь отправляет формы, программа, кажется, игнорирует PreparedStatement и только замечает userPath. Интересно, что может быть причиной такого поведения? Ошибка не печатается.
Servlet.java
} else if (userPath.equals("/purchase")) {
String OD = request.getParameter("OD");
String FN = request.getParameter("FN");
String LN = request.getParameter("LN");
String PN = request.getParameter("PN");
String EM = request.getParameter("EM");
String A1 = request.getParameter("A1");
String A2 = request.getParameter("A2");
String CT = request.getParameter("CT");
String SPR = request.getParameter("SPR");
String PZC = request.getParameter("PZC");
String CTRY = request.getParameter("CTRY");
String referenceNumber = request.getParameter("referenceNumber");
String status = request.getParameter("status");
String queue = request.getParameter("queue");
String cart_total = request.getParameter("cart_total");
String order_details = request.getParameter("order_details");
try{
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/application?user=root&password=12345");
PreparedStatement pst;
pst = connection.prepareStatement("insert into customer_order(date_created, first_name,last_name,phone,email,address_1,address_2,city,State_Province_Region,Postal_Zip_Code,country,referenceNumber,status,queue,cart_total,order_details) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
//When concating strings you should do something like st = connection.prepareStatement("Insert into student values ('" + userid + "','"+pw+"')"); but the right way is
//st = connection.prepareStatement("Insert into student values (1,2)");
pst.setString(1,OD);
pst.setString(2,FN);
pst.setString(3,LN);
pst.setString(4,PN);
pst.setString(5,EM);
pst.setString(6,A1);
pst.setString(7,A2);
pst.setString(8,CT);
pst.setString(9,SPR);
pst.setString(10,PZC);
pst.setString(11,CTRY);
pst.setString(12,referenceNumber);
pst.setString(13,status);
pst.setString(14,queue);
pst.setString(15,cart_total);
pst.setString(16,order_details);
pst.executeUpdate();
}catch(ClassNotFoundException | SQLException ex){
//print a message or something
}finally{
Connection connection = null;
if (connection!=null){
try {
connection.close();
} catch (SQLException ex) {
Logger.getLogger(ControllerServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
userPath = "/confirmation";
}
Checkout.jsp
<form id="shipping_form" method="post" action="purchase" name="checkout">
<label for="date" class="shp_label">Order Date </label>
<input id="date" name="OD" type="text" class="shp_ipt" value="<%= new java.util.Date()%>" readonly>
<label for="fname" class="shp_label">First Name </label>
<input id="fname" name="FN" type="text" class="shp_ipt" required>
<label for="lname" class="shp_label">Last Name </label>
<input id="lname" name="LN" type="text" class="shp_ipt" required>
<label for="phone" class="shp_label"> Phone </label>
<input id="phone" name="PN" type="text" class="shp_ipt" required>
<label for="email" class="shp_label"> Email </label>
<input id="email" name="EM" type="email" class="shp_ipt" required>
<label for="add1" class="shp_label"> Address 1 </label>
<input id="add1" name="A1" type="text" class="shp_ipt" required>
<label for="add2" class="shp_label"> Address 2 </label>
<input id="add2" name="A2" type="text" class="shp_ipt">
<label for="city" class="shp_label"> City </label>
<input id="city" name="CT" type="text" class="shp_ipt" required>
<label for="spr" class="shp_label"> Region </label>
<input id="spr" name="SPR" type="text" class="shp_ipt" required>
<label for="pzc" class="shp_label"> Zip / Code </label>
<input id="pzc" name="PZC" type="text" class="shp_ipt" required>
<label for="country" class="shp_label"> Country </label>
<input id="country"name="CTRY" type="text" class="shp_ipt" required>
<input type="hidden" name="referenceNumber" value="<%=System.currentTimeMillis()%>" />
<input type="hidden" name="staus" value="Pending" />
<input type="hidden" name="queue" value="This information will be updated soon." />
<input type="hidden" class="cartTotal" style="border:none; background:transparent;" name="cart_total" readonly type="text" value="${cart.total}"/>
<input type="hidden" name="order_details" value="Your order is being processed." />
<input class="submit_button button" name="submit" value="Ship Me!" type="submit">
</form>
1 ответ
Если вы не нашли ошибку, вы можете изменить некоторый код в readyStatement. Как это -
pst = connection.prepareStatement ("вставить в значения customer_order ('"+FN+"', '"+LN+"',.........) ");
И помните, что после PreparedStatement это должен быть метод execute(), выполняемый объектом PreparedStatement. Вот так - pst.execute();