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它還是可以在最後一次做
當它被重新分配意味着一個新的和舊的對象將成爲無效的是不是? – user75ponic
(1)是和(2)否。 '舊的變得無效'是毫無意義的。對象不會「失效」。 GC之前一點都沒有發生。這就是爲什麼你必須關閉它。 – EJP
@EJP我應該關閉準備好的語句兩次,還是我使用preparedStatement.close()它關閉所有實例? (有這個代碼,它運行良好) –