У меня есть метод, который имеет тип Connection
. Он возвращает значение Connection
после его подключения к базе данных. Вот код:Если область объекта соединения JDBC является локальной, нужно ли ее явно закрывать? (Используется база данных MySQL)
public Connection establishConnection()
{
Connection conn = null;
try
{
this.readLogin(); // prompts user to input for user, pass and host variables using Scanner class
this.createDatabaseIfNeeded(); // creates chessleaguedb if not found
conn = DriverManager.getConnection
("jdbc:mysql://"+host+":3306/chessleaguedb", user, pass);
System.out.println("Successfully connected to chessleaguedb");
}
catch (SQLException z)
{
// logic
}
return conn;
}
Я создаю экземпляр класса этого метода в своем классе меню; вызовите выше метод и передать его возвращаемое значение объекта Connection в классе меню (я делаю это только, чтобы держать вещи в чистоте, и, надеюсь, придерживаться принципов хорошего дизайна OO):
DatabaseConnection startConnection = new DatabaseConnection(); // class the above method is located in
Connection connect = startConnection.establishConnection();
Мой вопрос заключается в следующем: из-за активное соединение открывается в указанном выше методе, мне нужно явно закрыть его в методе? Или потому, что объект Connection
в этом методе является локальным и не будет существовать после завершения метода, это необходимо? Я не могу закрыть его, потому что вызов соответствующего метода закрытия после return conn;
дает мне недостижимую ошибку в NetBeans. EDIT * Я не могу использовать Pooling как не Java EE и не могу использовать программное обеспечение с открытым исходным кодом для его обработки, поскольку работа должна быть моей, так как это университетская работа (2-й год).
Точно то, что мне нужно было знать. –
Важным здесь является то, что ничего волшебного, когда переменные выпадают из области видимости. В конечном итоге они могут быть GCed, но это все; блокировки не освобождаются, соединения не возвращаются в пул, закрытые замки закрыты и т. д. –
@javaguy ценят код. Если я должен был вызвать «conn.closeConnection()» после оператора return в методе, он дает мне ошибку недостижимого оператора. Может быть, это плохой дизайн с моей стороны в первую очередь, но как мне его закрыть в методе, который возвращает значение Connection? –