Выполнение двух Java PreparedStatements с одним выбором стиля соединения

Хорошо, я понял, что действительно задал слишком много вопросов, не внося свой вклад в сообщество, но мне нужно ваше мнение по этому поводу. Скажите, если я имеют

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 и иметь возможность удалить шаблонный код, поэтому вопрос все еще стоит: из двух вышеупомянутых стилей, что было бы лучше? Если они оба будут выполнять ожидаемое поведение, даст ли последнее мне заметный прирост производительности, извиняющий «уродливый» стиль?

8
задан Kevin Jin 26 June 2011 в 20:53
поделиться