Должен ли я всегда закрывать CachedRowSet, даже если он выходит из области видимости?

Рассмотрим следующий фрагмент кода:

public void getUsers() {
    CachedRowSet rowSet = new CachedRowSetImpl();
    .........     /* Initialize the rowset */
    String query = "SELECT user_id FROM users";
    rowSet.setCommand(query);
    rowSet.execute();
    .........    /* Do some job */

}

Здесь CachedRowSet Объект используется локально в методе. Нужно ли вручную закрывать его здесь, или содержимое, которое он содержит, будет автоматически собирать мусор после завершения метода?

1 ответ

Решение

От: http://docs.oracle.com/javase/1.5.0/docs/api/javax/sql/rowset/CachedRowSet.html

Объект CachedRowSet - это отключенный набор строк, что означает, что он использует соединение со своим источником данных только на короткое время. Он подключается к своему источнику данных во время чтения данных, чтобы заполнить себя строками, и снова во время распространения изменений обратно в свой базовый источник данных. В остальное время объект CachedRowSet отключается, в том числе во время изменения его данных. Отключение делает объект RowSet намного более компактным и, следовательно, намного легче передать другому компоненту. Например, отключенный объект RowSet может быть сериализован и передан по проводной связи тонкому клиенту, такому как персональный цифровой помощник (PDA).

это означает, что нет проблем с подключением, чтобы закрыть, так что вы можете оставить его

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

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

Другие вопросы по тегам