2014-07-08 57 views
1
ResultSet rst = stmt.executeQuery(); 
    PreparedStatement preparedStatement; 
    while (rst.next()) { 
     Integer languageId = rst.getInt("language_id"); 
     Map<String, List<UserMessageItem>> listUserMessageItem = new HashMap<String, List<UserMessageItem>>(); 
     *preparedStatement = connection.prepareStatement(query);*// first assignation of preparedStatement 
     preparedStatement.setInt(1, languageId); 
     ResultSet resultSet = preparedStatement.executeQuery(); 

     while (resultSet.next()) { 
      //do stuff 
      } else { 
       //do else stuff 

    } 

    *preparedStatement = connection.prepareStatement(DictionaryManager.LOAD_MAX_MESSAGE_ID);*//other assignation of preparedStatement 
    ResultSet resultSet = preparedStatement.executeQuery(); 
    if (resultSet.next()) { 
     maxMessageId = resultSet.getInt("MAX(message_id)"); 
    } 

    resultSet.close(); 
    preparedStatement.close(); 

    rst.close(); 
    stmt.close(); 

我不得不重構這個東西...請不要在意嘗試捕捉的缺席finally塊...任何我想問你:我應該在分配新準備好的語句之前關閉preparedStatement嗎?是否需要關閉準備好的聲明每次reassinging它還是可以在最後一次做

回答

2

您必須每次關閉它。重新分配它會創建一個新的並釋放舊的。

+0

當它被重新分配意味着一個新的和舊的對象將成爲無效的是不是? – user75ponic

+1

(1)是和(2)否。 '舊的變得無效'是毫無意義的。對象不會「失效」。 GC之前一點都沒有發生。這就是爲什麼你必須關閉它。 – EJP

+0

@EJP我應該關閉準備好的語句兩次,還是我使用preparedStatement.close()它關閉所有實例? (有這個代碼,它運行良好) –

相關問題