2017-06-10 88 views
-2

我剛剛學會了通過Eclipse調試器遍歷我的代碼。 但是,我不知道爲什麼這個過程繼續回到71 - ps.executeUpdate(),而控制檯提到了第79行的錯誤,並且還提到了其他類的其他錯誤行。希望有人能告訴我發生了什麼事。有人能告訴我Eclipse調試的錯誤意味着什麼?

這裏有subjectDAOImpl代碼:

public void insertSubject(subject s) throws MyDataException { 
    try {  
     openConnection();    
     String qry = INSERT_QRY1; 
     //"INSERT INTO hi5project.subject(subject)VALUES (?)";    
     ps = connection.prepareStatement(qry); 
     int i = 0;    
     String[] sub = new String[3]; 

     while(i < sub.length){    
      String e = s.getSubj(); 
      ps.setString(1, e); 
      ps.executeUpdate();  - line 71 
     } 

     if (ps !=null) 
      closeConnection(); 

     }catch (SQLException e) { 
      e.printStackTrace(); 
      throw new MyDataException("DB Error"); - line79 
     } 
    } 

控制器:

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 
    subject m = new subject(); 
    manager mgr = new manager(); 
    try { 
     String[] sub = request.getParameterValues("subject"); 
     int i = 0; 
     while (i < sub.length) { 
      sub[i] = m.getSubj(); 
      mgr.insertSubject(m); 
      out.println("Successful registered subject"); 
     } 
    } catch (Exception ex) { 
     // TODO Auto-generated catch block 
     ex.printStackTrace(); 
    } 
} 

error

+2

請顯示錯誤以及代碼都是文字,而不是截圖。 – luk2302

+0

我懷疑你在循環內執行預處理語句的方式,我認爲這可能會導致問題 –

+0

@YCF_L,你能更清楚地瞭解問題嗎?我應該把String []子放在try之外嗎?或... Sori ..但我不清楚.. –

回答

2

,因爲您要執行多個語句,我會建議使用聲明配料,而不是

我不知道爲什麼你使用:

String[] sub = request.getParameterValues("subject"); 
int i = 0; 
while (i < sub.length) { 
    sub[i] = m.getSubj(); 
    mgr.insertSubject(m); 
    out.println("Successful registered subject"); 
} 

我想你只需要使用:

String[] sub = request.getParameterValues("subject"); 
mgr.insertSubject(m); 
out.println("Successful registered subject"); 

,您可以insertSubject的簽名更改爲insertSubject(String[] sub),現在你可以使用這個批處理插入數據:

connection.setAutoCommit(false); 
try (PreparedStatement insert = connection.prepareStatement(qry)) { 

    for (String s : sub) {//loop throw your array 
     insert.setString(1, s); 
     insert.addBatch(); 
    } 
    insert.executeBatch();//executing the batch 
} 
connection.commit();//commit statements to apply changes 

你的循環不能完成,因爲你不增加i,我已經改變了一點你的邏輯希望這可以幫助你,另一件事看來,子陣列總是空的,所以你總是使用null

+0

我的控制器我需要從我的HTML表單讀取值。所以,我仍然需要getParameterValues .... –

+0

你是什麼意思@KarenGoh? –

+0

我以爲你正在爲我的控制器顯示正確的代碼,然後我意識到它是爲其他班級。順便說一句,在connection.commit()之後不需要closeConnection()?並且我必須添加在catch異常? –

相關問題