Лучший способ - использовать пул соединений. Если вы кодируете приложение Java EE, вы можете сделать пул в конфигурации (в glassfish вы можете использовать консоль администратора). Сервер свяжет этот пул (через DataSource) с указанным вами именем JNDI (скажем, «jndi / mydb»).
Таким образом, получить соединение в коде очень просто:
InitialContext ctx = new InitialContext();
//Application Server will automatically bind new InitialContext() call to its
//own context (where your DataSource is located).
DataSource ds = ctx.lookup("jndi/mydb")
Вы можете передать этот источник данных везде и получить getConnection так же просто, как ds.getConnection () , никогда не закрывая его (потому что он объединяется и используется повторно).
P.S. Использование DriverManager в качестве способа получения соединения подходит для небольших консольных приложений без требований к производительности и масштабируемости.