возврат Resultset замедляет программу - PullRequest
0 голосов
/ 29 марта 2012

Итак, я написал метод, чтобы просто получить таблицу базы данных, и она возвращает набор результатов. Но, похоже, зависает при вызове этого метода. Я ДУМАЛ, что это возвращало только указатель, но я все еще плохо знаком с программированием. Этот вызов возвращает указатель Resultset или он передает все это. Мой главный вопрос: почему это замедляет программу? Стол не такой большой.

public ResultSet getEmployeeTable() throws SQLException
{
    ResultSet rsEmpl;
    Connection con = getDBConnection();
    PreparedStatement pstmt;
    String query;

    query = "Select * from PTO_Employee where enabled = ?";
    pstmt = con.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
    pstmt.setInt(1, 1);
    rsEmpl = pstmt.executeQuery();      

    return rsEmpl;
}

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Это соединение с БД, которое занимает больше всего времени.Это может продолжаться в диапазоне от 100 мс до 1 секунды.Именно поэтому большинство веб-приложений используют так называемый пул соединений.Пул соединений содержит группу уже открытых соединений, которые веб-приложение может затем повторно использовать.Вам нужно будет только переписать код JDBC, чтобы он соответствовал идиоме JDBC открытия и закрытия в блоке try-finally, в противном случае у вас по-прежнему будут проблемы с производительностью, поскольку вы никогда не вернете соединение к пулу, и пул будет работатьиз них.

Далее, в тот момент, когда вы возвращаете ResultSet, он не содержит никаких записей в памяти.Обычно он извлекается из БД и заполняется в памяти Java при первом вызове next().Однако пропуск ResultSet вне контекста, в котором вызывается SQL-запрос, является очень плохой практикой.Обычно он должен быть сопоставлен с набором сущностей.

См. Также:

0 голосов
/ 29 марта 2012

Ваш метод возвращает ссылку. Но эта ссылка указывает на место в куче, где содержимое набора результатов хранится в памяти.

Таким образом, даже если вы передаете ссылку, у вас есть весь результат где-то в вашей памяти.

Ваш метод "зависает", потому что он обрабатывает все необходимые действия для получения результатов из базы данных. (создание соединения, аутентификация в базе данных, выполнение оператора, получение результатов ...)

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