Eu entendo nos estarmos usando o primeiro try() por causa do fechamento da conexão ao banco, mas por que estamos usando este segundo Try()? se colocarmos o conteúdo do try entre as chaves {} faria o mesmo efeito?
public List<Produto> listar() throws SQLException {
List<Produto> produtos = new ArrayList<>();
String sql = "SELECT * FROM PRODUTO";
try(PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.execute();
try(ResultSet rst = preparedStatement.getResultSet()) {
while(rst.next()) {
Produto produto =
new Produto(rst.getInt(1), rst.getString(2), rst.getString(3));
produtos.add(produto);
}
}
return produtos;
}
}