2010-07-25 47 views
0

我在我的jsp中有一個更新語句。問題是,當我更改jsp中的所有字段並執行更新狀態時,數據庫將被更新,但是當我更新某個字段時,其他字段將在SQL語句中「」。此外,我有一個問題是,我在日期中有一個匹配錯誤,那麼在我的jsp中的SQL語句中應用的最佳格式是什麼。如何使用我的jsp中的更新語句

對於第一個問題: HTML代碼:

<select size="1" name="Nationality" class="content"> 
     <option selected value="<%=Nationality%>"><%=Nationality%></option> 

<% 

    try 
    { 

     ResultSet rs=null; 

     Statement st1=null; 

     String query = "select country_code, nationality_name from nationality_lkup "; 

     st1 = conn1.createStatement(); 

     rs = st1.executeQuery(query); 

     while(rs.next())  
    { 

%> 
    <option value="<%=rs.getString("country_code")%>" > 
     <%=rs.getString("nationality_name")%></option> 
<% 
     } 

    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
%> 

      </select> 

和更新statament是:

String sz_SQLUpdate = "UPDATE cir SET"; 
z_SQLUpdate = sz_SQLUpdate + " , nationality ='"+Nationality+"'"; 

而且,我該怎麼應對的更新語句中的日期格式?

回答

3

但是當我更新某個字段時,其他字段將在SQL語句中成爲「」。

我不知道這是否是完整代碼(顯示的SQL執行時儘量將產生一個SQL語法除外),但你至少不應該把SET和第一列名之間用逗號。

如果SQL實際上在語法上是有效的,那麼它可能僅表示這些變量在您訪問它們以在SQL語句中內聯時是空的。您應該預先填充這些變量,或者只需將相關列遠離SQL查詢(如果不需要更新)。

此外,我有一個問題是,我在日期有一個錯過匹配,所以什麼是在我的jsp SQL語句中應用的最佳格式。

最好的方法是不用擔心格式,只需在SQL語句中使用PreparedStatement#setTimestamp()設置一個表示時間戳的完整Java對象。另請參閱此recent question


這就是說,你在代碼中有兩個主要問題。

  1. 應避免JSP文件中的原始Java代碼。它只會導致所有顏色的麻煩,不僅對您而言,而且對於其他人,無論現在還是將來都如此。

  2. 該SQL對SQL injectionattacks敏感,並且JDBC代碼易於發生資源泄漏。

這將是一個很長的故事來講解如何做正確的事情,所以這裏只是幾個環節要經過精心自己,這樣你得到的圖片如何做正確的事情。

你或許應該拋棄那些老式的JSP教程/本書你正在讀。