Что происходит с исходным набором результатов, когда он возвращается из метода в новый объект? - PullRequest
0 голосов
/ 13 февраля 2010

псевдокод, чтобы лучше объяснить себя. В данный момент я изучаю Java.

если у меня есть метод

public resultSet getEverything() 
{    
   resultSet rs = blabla;    
   return rs 
}

Я не могу rs.close(), так как мне нужно использовать его в методе, который я получаю следовательно, тогда я буду использовать его и, возможно, «закрою» новый набор результатов, созданный мной.

Что происходит с предыдущим набором результатов? Оставляется ли сборщик мусора? Он закрывается, когда я закрываю новый набор результатов? Влияет ли это на эффективность / производительность кода?

Любая обратная связь будет принята с благодарностью :), поскольку это немного смутило меня. Я думаю, это скорее вопрос ООП, нежели Java. Спасибо!

Ответы [ 2 ]

1 голос
/ 13 февраля 2010

Вы не должны возвращать java.sql.ResultSet из метода. Он всегда должен создаваться, отображаться в объект или структуру данных и закрываться в области действия метода, в котором он был создан в блоке finally.

java.sql.ResultSet связан с курсором базы данных, дефицитным ресурсом. Вы не хотите держать их открытыми в течение длительного времени.

Сборщики мусора не очищают результирующие наборы, операторы или соединения с базами данных. Он удалит ссылку из памяти, но курсор или соединение все еще будут открыты на стороне базы данных. Вы несете ответственность за их правильное закрытие, иначе вы исчерпаете запас.

Объект, структура данных или CachedRowSet - это правильная вещь для возврата.

0 голосов
/ 13 февраля 2010

Есть только один результат. Вы создаете это и возвращаете это в этом методе; вызывающий метод (тот, который вызывает getEverything()) теперь имеет его - у него нет копии или чего-то подобного; у него есть resultSet, который вы создаете в этом методе. Но вызывающий метод должен присвоить результат getEverything(), если он должен его закрыть - вот так:

resultSet rs = getEverything();

вместо простого вызова метода следующим образом:

getEverything();

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

...