Где правильнее расположить вызов Connection - while или main?
Подскажите, где было бы правильнее расположить вызов метода Connection() при подключении к базе данных?
MyServer, внутри него цикл while(true). В этом цикле клиенты подключаются и заполняют synchronized список строк (в методе cc.start()). Дальше сервер начинает этот непустой лист построчно запросом писать в базу данных - метод sendStringsToBaseAndClearList.
Собственно, вопрос в том, где было бы корректнее создавать подключение к базе - до цикла while(true) или внутри него? Имеется ввиду метод DriverManager.getConnection(…). Ведь тогда мы имеем постоянное, но долго висящее подключение. А если внутри цикла - то за короткий промежуток времени будет много коротких подключений.
Грубо говоря, что безопаснее для БД?..
Код:
package com.benderje.PCC;
import java.io.IOException;
import java.net.ServerSocket;
import java.sql.SQLException;
public class MyServer {
public SynchronizedChequesListExecutor synchronizedExecutor;
public void serverExecutor() {
try (ServerSocket server = new ServerSocket(8000)){
this.synchronizedExecutor = new SynchronizedChequesListExecutor();
DataBaseConnector connector = new DataBaseConnector();
System.out.println("Server started!");
while(true){
ClientCommunicator cc = new ClientCommunicator(new Phone(server));
cc.start();
if (synchronizedExecutor.getListWithNotPrintedChequesFilled().size() > 0){
connector.setConnection();
if(connector.isConnected()){
this.synchronizedExecutor.sendStringsToBaseAndClearList(
connector.getConnection(),
synchronizedExecutor.getListWithNotPrintedChequesFilled().size());
}
connector.closeConnection();
}
}
} catch (IOException | SQLException e){
throw new RuntimeException(e);
}
}
}
setConnection() класса DataBaseConnector:
public void setConnection() {
try {
setConnectionProperties();
connection = DriverManager.getConnection(
"jdbc:firebirdsql:" + url, login, password);
isConnected = true;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}