【发布时间】:2015-08-03 00:32:04
【问题描述】:
我正在尝试根据表单输入使用 PreparedStatement 将数据插入数据库。当用户在结帐页面 (checkout.jsp) 上单击“提交”时,程序遵循正常流程,表单根据需要将他重定向到确认.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>
【问题讨论】:
-
你怎么知道
else-if中的代码块正在执行? -
@fdsa:感谢您的回复。因为在结帐页面上,当我填写表格并单击提交时,表格正在发送到确认页面,告诉我正在执行部分
else-if,没有:S?通过删除else-if之间的所有内容,我得到了相同的结果。它的行为就像根本没有PreparedStatement一样。它知道路径,但不知道查询是否存在,如果这有意义的话。我刚刚从头开始重写了一个新的 PreparedStatement。我会更新 OP。 -
制作一个单独的JSP来检查连接是否正确获得?
-
您的代码看起来正确。再次检查表单是否提交或再次检查您的数据库或打印出 try 块内的语句以检查代码是否正在执行。 .
标签: java jsp servlets prepared-statement forms http-post