Executando duas Java PreparedStatements com uma conexão - escolha de estilo
Ok, percebi que realmente fiz muitas perguntas sem contribuir de volta para a comunidade, mas quero suas opiniões sobre isso. Diga se eu tiver
private void closeAll(ResultSet rs, PreparedStatement ps, Connection con) {
if (rs != null)
try {
rs.close();
} catch (SQLException e) {
}
if (ps != null)
try {
ps.close();
} catch (SQLException e) {
}
if (con != null)
try {
con.close();
} catch (SQLException e) {
}
}
e eu queria fazer várias operações no meu banco de dados MySQL usando uma única conexão. É melhor escrever
Connection con = ...;
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = con.prepareStatement(...);
rs = ps.executeQuery();
if (rs.next()) ...;
} catch (SQLException e) {
System.err.println("Error: " + e);
} finally {
closeAll(rs, ps, null);
}
try {
ps = con.prepareStatement(...);
rs = ps.executeQuery();
if (rs.next()) ...;
} catch (SQLException e) {
System.err.println("Error: " + e);
} finally {
closeAll(rs, ps, con);
}
o
Connection con = ...;
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = con.prepareStatement(...);
rs = ps.executeQuery();
if (rs.next()) ...;
rs.close();
ps.close();
ps = con.prepareStatement(...);
rs = ps.executeQuery();
if (rs.next()) ...;
} catch (SQLException e) {
System.err.println("Error: " + e);
} finally {
closeAll(rs, ps, con);
}
Considero melhor significar mais seguro, mais claro, mais conciso ou mais robusto. Não tenho certeza se o último sempre fechará as declarações e conjuntos de resultados preparados sempre que encontrar uma exceção, enquanto acredito que pareça mais conciso. Mas o primeiro parece mais agradável, pois é mais consistente, mas coloca mais sobrecarga, pois usa mais blocos try tr
Eu percebo que a parte de gerenciamento automático de recursos do Java 7 do Project Coin me forçará a me apoiar no primeiro, pois os recursos usados no cabeçalho são implicitamente finais no corpo. No entanto, tenho algum tempo antes de me preocupar em revisar meu código para adaptá-lo ao ARM e poder remover o código padrão, então a questão ainda permanece: dos dois estilos acima, qual seria a melhor prática? Se os dois adotarem os comportamentos esperados, o último me dará um aumento notável no desempenho que desculparia o estilo "mais feio"?