2012-09-04 42 views
1

我有一個數據庫表,我可以編輯一個值。我想更新相同,下面是我嘗試過的代碼。編輯和更新相同的文本框

表的代碼如下

<table border="1px"> 
    <tr> 
     <td><b>DBID</b></td> 
     <td><b>Query Raised</b></td> 
     <td><b>Time Raised</b></td> 
     <td><b>Query Answered</b></td> 
     <td><b>Time Answered</b></td> 
    </tr> 
<% 
try { 
    ps = con.prepareStatement("Select DBID, Query_Raised, TR, Query_Answered, TA from Scope1 where TR!='null'"); 

    rs = ps.executeQuery(); 

    while(rs.next()) { 
%> 
    <tr> 
     <td><%=rs.getString("DBID")%></td> 
     <td><input type="Text" value="<%=rs.getString("Query_Raised")%>" name="Updat"></td> 
     <td><%=rs.getString("TR")%> </td> 
     <td><%=rs.getString("Query_Answered")%></td> 
     <td><%=rs.getString("TA")%></td> 
     <td><input type="Submit" value="Update"></td> 
    </tr> 
<% 
    } // while loop ends here 

    rs.close(); 
    con.close(); 
} catch(Exception e) { 
    out.println(e); 
} 
%> 
</table> 

和所使用的更新查詢:

String a = request.getParameter("Updat"); 

ps = con.prepareStatement("Update Scope1 Set Query_Raised = '" + a + "'"); 

int i = ps.executeUpdate(); 

if(i == 1) { 
    out.print("Done"); 
} else{ 
    out.print("Erro"); 
} 

我想知道,我應該使用更新相同的數據where條件頁。

感謝

+2

請不要將數據庫代碼放入JSP中! JSP是** view **組件,並且您的查詢應該封裝在** model **一側的bean中(請參見[這裏](https://en.wikipedia.org/wiki/Model%E2%80%93view %E2%80%93controller)的大圖)。一旦你建立這個結構,你會發現很多問題已經解決。 –

+0

與您的問題相關:爲您的''字段添加唯一標識符,因此提交後您可以找出哪些已被修改。 –

+0

對於像這樣的簡單情況,構建MVC通常是一種純粹的矯枉過正,因爲它需要額外的代碼並需要時間來構建和部署,而只需將代碼放入JSP中就需要基本刷新頁面。 – Endy

回答

4

我理解的問題的第一個代碼部分是JSP說update.jsp和第二部分它似乎是你的servlet,說UpdateServlet

因此,在您update.jsp你有一個<input type="text">submit按鈕的每一行,但<form>我覺得是唯一一個必須<table>外面,所以在這裏不用我的解決方案(任選其一):

  1. 使用多個<form>標籤的每一行,像

    <form action="whatever_action_you_have_which_calls_the_servlet" 
         name="form<%=rs.getString("DBID")%>" 
         id="formID<%=rs.getString("DBID")%>"> 
        // Including name and id so that the different forms remain unique 
        <tr> 
         <td><%=rs.getString("DBID")%></td> 
         <td><input type="Text" value="<%=rs.getString("Query_Raised")%>" name="Updat"></td> 
         <td><%=rs.getString("TR")%> </td> 
         <td><%=rs.getString("Query_Answered")%></td> 
         <td><%=rs.getString("TA")%></td> 
         <td><input type="Submit" value="Update"></td> 
        </tr> 
    </form> 
    

    所以,當你點擊提交,將提交<form>針對點擊了submit按鈕,只會提交已編輯的input,瞧!你的servlet代碼也可以正常工作。

  2. 您可以同時在同一個JSP代碼塊,然後用<form>代碼段爲點#1中所描述的第二代碼片段是:

    String a = request.getParameter("Updat"); 
    
    if ((a is not empty) or (a is not null) ) { 
        ps = con.prepareStatement("Update Scope1 Set Query_Raised = '" + a + "'"); 
    
        int i = ps.executeUpdate(); 
    
        if(i == 1) { 
         out.print("Done"); 
        } else{ 
         out.print("Error"); 
        } 
    } 
    
    ... 
    
    <form action="whatever_action_you_have_which_will_call_this_JSP" ...> 
        <tr> ... your code as in point#1 
        </tr> 
    </form> 
    
  3. 使用AJAX和其他JavaScript的操縱方法來完成這一點,如Endy所述。
    爲此,您需要有JSP(顯示)& Servlet(更新代碼)。
    這可能會更加努力,但您將學習Ajax,並且會更接近現實世界。
    到目前爲止jQuery ajax是最簡單的使用。

注:
只是爲了記錄在案,我知道你可能會練,但如果你計劃在實際項目中使用它,那麼請讀。

這是一個壞實踐在JSP使用小腳本(除非真正需要,並且太多,如果它是視圖層次的邏輯,而不是業務或數據邏輯電平),甚至糟糕在JSP中使用JDBC代碼。所以如果你可以關注f_puras的advice,那將會非常棒。

如果你想知道我爲什麼要聽你主動提出意見,然後這裏是一些耐人尋味:

希望這有助於。

+0

感謝普拉卡什,這幫助了我 – Rakesh

0

您可以使用AJAX把數據上傳到處理該更新頁面,然後返回結果作爲回調,看到http://api.jquery.com/jQuery.post/

其他解決方案是在處理完提交後,將用戶轉回到帶有表單的頁面。

第三種解決方案是將數據提交到同一頁面並在那裏解析/更新。

+0

嗨,恩迪,你可以請讓我知道我如何做到這一點與你提到的第三種方法。謝謝 – Rakesh

+0

基本上將您的「更新查詢」部分移到表單所在的同一頁面。這不是一個很好的做法,但工作得很好。 – Endy