Хорошо, я понял, что действительно задал слишком много вопросов, не внося свой вклад в сообщество, но мне нужно ваше мнение по этому поводу. Скажите, если я имеют
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) {
}
}
, и я хотел выполнить несколько операций с моей базой данных MySQL, используя одно соединение. Лучше написать
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);
}
или
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);
}
, я считаю, что лучше иметь в виду более безопасный, ясный, краткий или более надежный. Я не уверен, будет ли последний всегда закрывать любые подготовленные операторы и наборы результатов, открытые всякий раз, когда он встречает исключение, хотя я считаю, что он выглядит более кратким. Но первый выглядит лучше, поскольку он более согласован, но при этом вызывает больше накладных расходов, поскольку он использует больше блоков try finally.
Я понимаю, что автоматическое управление ресурсами Java 7 в Project Coin заставит меня склоняться к первому, поскольку ресурсы, используемые в заголовке, неявно являются окончательными в теле. Однако у меня есть довольно много времени прежде чем мне придется беспокоиться о пересмотре моего кода чтобы адаптировать его к ARM и иметь возможность удалить шаблонный код, поэтому вопрос все еще стоит: из двух вышеупомянутых стилей, что было бы лучше? Если они оба будут выполнять ожидаемое поведение, даст ли последнее мне заметный прирост производительности, извиняющий «уродливый» стиль?