2015-09-04 123 views
-1

以下代碼是通過單擊HTML中的提交按鈕來從數據庫獲取數據,通過JSP更新和設置數據到數據庫。通過單擊JSP中的提交按鈕將數據插入MySQL數據庫

<% 
    String CONN_STRING = "jdbc:mysql://localhost/pmsdb"; 
    String USERNAME = "dbuser"; 
    String PASSWORD = "dbpassword"; 

    Connection conn=null; 
    ResultSet rs =null; 
    ResultSet rs2 =null; 

    Statement stmt=null; 
    Statement stmt2=null; 

    PreparedStatement pst=null; 
    PreparedStatement pst2=null; 
    PreparedStatement pst3=null; 

    Class.forName("com.mysql.jdbc.Driver"); 

    conn = DriverManager.getConnection(CONN_STRING, USERNAME, PASSWORD); 

    String pno = request.getParameter("PONo"); 


    String sql = "SELECT * FROM purchaseorderinfo WHERE PONo='"+pno+"'"; 
    String sql2 ="SELECT * FROM itemspoinfo WHERE PONo='"+pno+"'"; 

    stmt = conn.createStatement(); 
    rs=stmt.executeQuery(sql); 

    stmt2=conn.createStatement(); 
    rs2=stmt2.executeQuery(sql2); 
    %> 

    <% 
    Class.forName("com.mysql.jdbc.Driver"); 
    conn = DriverManager.getConnection(CONN_STRING, USERNAME, PASSWORD); 


    if(request.getParameter("btnacc")!=null){ 

     //getting todaydate 
     Date date = new Date(); 
     Timestamp timestamp = new Timestamp(date.getTime()); 

     String sql3="UPDATE itemspoinfo SET AorD=1 WHERE PONo='"+pno+"'"; 
     pst = conn.prepareStatement(sql3); 
     pst.execute(); 

     String sql4="INSERT INTO pointoinvoce (InvoiceDate, Company, ItemName, Qty, Price, PONo) VALUES (?,?,?,?,?,?)"; 
     pst2=conn.prepareStatement(sql4); 

     int noofdrugs=0; 

     while(rs2.next() && rs.next()){ 
      String name =rs2.getString("ItemName"); 
      String qty = rs2.getString("Qty"); 

      pst2.setTimestamp(1, timestamp); 
      pst2.setString(2, rs.getString("Supplier")); 
      pst2.setString(3, name); 
      pst2.setString(4, qty); 
      pst2.setString(5, rs2.getString("Price")); 
      pst2.setString(6, pno); 
      pst2.addBatch(); 
      noofdrugs++; 

     } 
     pst2.executeBatch(); 

    } 

    if(request.getParameter("btnde")!=null){ 

     String sql5="UPDATE itemspoinfo SET AorD=1 WHERE PONo='"+pno+"'"; 
     pst3= conn.prepareStatement(sql5); 
     pst3.execute(); 
    } 
    %> 
<div class="row"> 
<div class="col-md-12"> 
<div class="citydetails"> 
    <div class="panel panel-primary"> 
     <div class="panel-heading">Purchase Order Details</div> 
     <div class="panel-body"> 
      <table class="table"> 
       <thead> 
        <tr> 
         <th>Purchase Order <%=request.getParameter("PONo") %></th> 
        </tr> 
       </thead> 
      <tbody> 

        <tr> 

         <td> 
          <% if(rs.next()){ %> 
          Purchase Order Date : <%= rs.getString("PODate") %><br> 
          Expected Date : <%=rs.getString("ExpectedDate") %> <br> 
          <% } %> 

          <table class="table"> 
           <tbody> 
            <tr> 
             <th>Items</th> 
             <th>Quantity</th> 
            </tr> 
            <% while (rs2.next()){ %> 
            <tr> 

             <td><%=rs2.getString("ItemName")%></td> 
             <td><%=rs2.getString("Qty")%></td> 

            </tr> 
            <% } %> 


           </tbody> 

          </table> 



         </td> 

        </tr> 

      </tbody> 

      </table> 
       <button type="submit" name="btnacc" class="btn btn-primary accept" id="btnacc" onclick="clickabtn()">Accept</button> 
       <button type="submit" name="btnde" class="btn btn-primary accept" id="btnde" onclick="clickdbtn()">Decline</button> 



     </div> 
    </div> 
</div> 
</div> 
</div> 

但當點擊btnacc按鈕沒有任何反應數據庫中的表。

而當btnde按鈕被點擊時,數據庫表中沒有任何反應。

這裏有什麼錯誤,請幫我解決這個問題?

+1

'jdbc' url中缺少端口號? jdbc:mysql:// localhost':3306'/pmsdb。確保數據庫連接已建立,對'conn'對象執行'null'檢查,以便您知道db是否已連接以及流程將到達何處。 – Sridhar

回答

1

您的HTML必須包含在<form> ... </form>中,他負責收集信息併發送服務器端。如果你沒有指定提交的目的地址,它會認爲它是當前頁面(這對servlet來說工作得很好),如果你沒有指定方法,默認情況下它會通過GET方法發送它。

檢查servlet的生命週期,你的代碼實際上是JSP。在後端它會生成一個不符合併發性的服務器。這意味着你必須自己威脅這類問題。例如:同時完成的兩個客戶端請求可能會導致彼此提交的衝突和干擾,可能會在服務器端產生ConcurrentModicationException。

相關問題