【问题标题】:Failed to insert data in database with PreparedStatement with jsp使用 JSP 的 PreparedStatement 在数据库中插入数据失败
【发布时间】: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


【解决方案1】:

如果您没有发现错误,那么您可以更改preparedStatement 中的一些代码。像这样-

pst = connection.prepareStatement("insert into customer_order values('"+FN+"', '"+LN+"',..........) ");

还记得在 PreparedStatement 之后必须通过 PreparedStatement 的对象执行 execute() 方法。像这样 - pst.execute();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多