Последовательная подготовленная государственная практика - PullRequest
4 голосов
/ 30 августа 2011

Я выполняю несколько SELECT с подряд и мне интересно, как мне обработать PreparedStatement с.

Пример кода:

//Connection conn is already declared
PreparedStatement pstmt = null;
ResultSet rset = null;
try {
  String sql = "SELECT ...";
  pstmt = conn.prepareStatement(sql);
  pstmt.setString(1, someVar);

  rset = pstmt.executeQuery();
  // Use ResultSet

  // A different query
  sql = "SELECT ...";
  pstmt = conn.prepareStatement(sql);
  pstmt.setString(1, someVar);

  rset = pstmt.executeQuery();
  // Use ResultSet
} catch (SQLException e) {
  // Handle
} finally {
  if (rset != null)
    rset.close();
  if (pstmt != null)
    pstmt.close();
  if (conn != null)
    conn.close();
}

Сейчасвопрос в том, будет ли лучше закрывать PreparedStatement s после каждого использования / использовать разные операторы или это не будет иметь никакого значения?

Я нашел некоторую информацию о повторном использовании PreparedStatement, которая всегдаимеет тот же запрос, но я не уверен в использовании разных запросов.

1 Ответ

11 голосов
/ 30 августа 2011

Вы не используете тот же PreparedStatement, фабричный метод Connection.prepareStatement возвращает вам новый экземпляр каждый раз, когда вы вызываете его. PreparedStatement.executeQuery делает то же самое с ResultSet. Вы просто используете те же переменные.

Это означает, что вы теряете ресурсы - первые PreparedStatement и ResultSet - каждый раз, когда вызывается этот метод, которые никогда не закрываются.

Я бы порекомендовал использовать JdbcTemplate Spring, который будет правильно обрабатывать эти ресурсы базы данных, и вы разбиваете код на два метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...