2016-12-04 32 views
1

(已更新)如何將動態值傳遞給java serlvet?

我正在使用java servlets和oracle sql建立一個酒店管理。
我從數據庫打印一個html表,如果我更改將值傳遞給另一個servlet,我需要更新一行。
這是我的第一個servlet

if(request.getParameter("hotelTableBtn") != null){ 
     String query = "select * from Hotels"; 
     response.setCharacterEncoding("utf-8"); 
     Connection conn; 

     try{ 
      conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","system","root"); 
      Statement st = conn.createStatement(); 
      ResultSet rs = st.executeQuery(query); 
      ResultSetMetaData metaData = rs.getMetaData(); 
      int columnCount = metaData.getColumnCount(); 

      pw.println("<table border=1 style=border-collapse:collapse>"); 
      pw.println("<tr>"); 

      for(int i = 1; i <= columnCount; i++){ 
       pw.println("<th>" + metaData.getColumnName(i)); 
      } 

      pw.println("</tr>"); 
      pw.println(); 
      String name = ""; 

      while(rs.next()){      
       int i; 
       int row = rs.getRow(); 

       pw.write("<form action=/ThesisAdmin/PrintTables method=post target=_self>"); 
       pw.println("<tr>"); 


       for(i = 1; i <= columnCount; i++){ 

        if(i == 1) 
         name = "name"; 
        else if (i == 2) 
         name = "category"; 
        else if (i == 3) 
         name = "address"; 
        else if (i == 4) 
         name = "phone"; 
        else 
         name = "email"; 

        pw.println("<td style=border:none> <input type=text value=" + rs.getString(i) + " name=" + name + "> </td>");       
       } 
        pw.println("<td> <input type=submit value=update name=updateBtn> </td>"); 

        pw.println("</tr>"); 
        pw.write("</form"); 

        pw.println(); 
       } 
       pw.println("</table>"); 

     }catch (Exception e){ 
      pw.write("" + e); 
     } 
    } 

,這是HTML表格

table sample

現在,我需要更新的行值,並將其發送到數據庫的樣本,這裏是第二個servlet PrintTables

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    response.setCharacterEncoding("utf-8"); 
    response.setContentType("text/html"); 
    Writer writer = response.getWriter(); 

    try{ 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 
    }catch(Exception e){ 
     writer.write("" + e); 
    } 

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

     String hotelName = request.getParameter("name"); 
     String hotelCategory = request.getParameter("category"); 
     String hotelAddress = request.getParameter("address"); 
     String hotelPhone = request.getParameter("email"); 
     String hotelEmail = request.getParameter("phone"); 


     try{ 
      Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","system","root"); 
      String update = "update Hotels set Name=?,Category=?,Address=?,Phone=?,Email=? where Name= '"+hotelName+"' "; 
      PreparedStatement pst = conn.prepareStatement(update); 

      pst.setString(1, hotelName); 
      pst.setString(2, hotelCategory); 
      pst.setString(3, hotelAddress); 
      pst.setString(4, hotelPhone); 
      pst.setString(5, hotelEmail); 
      pst.executeUpdate(); 

     }catch(Exception e){ 
      writer.write("" + e); 
     } 
    } 
} 

我更新了我這樣的代碼,但只有第一個按鈕works.Any想法? 預先感謝您。

(更新)

最後我的程序中加入一個新表每row.AlsoΙ添加deletion.Solution多了一個按鈕的工作:在

  pw.println("<table border=1 style=border-collapse:collapse>"); 

      pw.println(); 
      String name = ""; 
      int cnt = 0;  

      while(rs.next()){      
       int i; 
       //int row = rs.getRow(); 

       pw.println("<tr>"); 
       pw.println("<table><tr><td>"); 
       pw.println("<tr>"); 

       if(cnt == 0){ 
        for(i = 1; i <= columnCount; i++){ 
         pw.println("<th>" + metaData.getColumnName(i)); 
        } 
        cnt = 1; 
       } 


       pw.println("</tr>"); 
       pw.write("<form action=/ThesisAdmin/PrintTables method=post target=_self>"); 

       for(i = 1; i <= columnCount; i++){ 

        if(i == 1) 
         name = "name"; 
        else if (i == 2) 
         name = "category"; 
        else if (i == 3) 
         name = "address"; 
        else if (i == 4) 
         name = "phone"; 
        else 
         name = "email"; 

        pw.println("<td style=border:none> <input type=text value=" + rs.getString(i) + " name=" + name + "> </td>");       
       } 

        pw.println("<td> <input type=submit value=update name=updateBtn> </td>"); 
        pw.println("<td><input type=submit value=delete name=deleteBtn> </td>"); 

        pw.write("</form>"); 
        pw.write("</td></tr></table>"); 
        pw.println("</tr>"); 
        pw.println(); 
       } 
       pw.println("</table>"); 

table

+0

你忘了實際的問題。 「我需要」不是一個問題。 – Kayaman

+0

張貼編輯,謝謝.. – Papadakis

+1

請你可以更詳細地解釋你是什麼意思的「動態行值」?也許一個例子會有所幫助。 – vanje

回答

0

每一行的數據庫表和html表代表一個對象。
每個對象都必須有一個ID

你應該添加一個帶有對象id的隱藏輸入字段到每一行。
併爲每個行/對象有一個單獨的表單。