Я думаю, что причина может быть найдена здесь
»приложение принимает допущение, что соединение SQL всегда доступно (без проверки или проверки перед выполнением команд), поэтому, когда строка происходит сбой или что-либо вызывает сброс / закрытие соединения, приложение генерирует это сообщение.
Для воспроизведения просто прервите сеанс SQL на сервере SQL, и вы получите то же самое похожее сообщение. "
[ 114] Исправлено: добавлена проверка, чтобы убедиться, что соединение может быть установлено, и добавлена повторная попытка / задержка + повторная попытка
.
Если Вы используете Class.forName (), то Вы не обязаны иметь любые зависимости времени компиляции от конкретного драйвера JDBC. Это особенно полезно, когда Вы - написание кода, которое может работать со множеством баз данных.
Рассмотрите следующий код:
// Register the PostgreSQL driver
Class.forName("org.postgresql.Driver");
Теперь сравните его с:
import org.postgresql.Driver;
// Register the PostgreSQL driver
DriverManager.registerDriver(new Driver());
И полагайте, что в первом примере, имя класса, возможно, также прибыло из файла свойств, XML-файла, и т.д., в зависимости от того, что удобно для Вашего приложения.
"производительность и т.д. лучше?"
Я сказал бы, что производительность для этой одноразовой операции является наименьшим количеством Ваших забот.
При использовании Java сервер приложений EE, ответ не "ни один". Необходимо настраивать пул соединения и позволять ему обработать загрузку драйвера и распространение соединения.
Руководство по интерфейсу API JDBC и Ссылка являются лучшей ссылкой для таких вопросов, раздел которых обращается к роли, которую играют классы Драйвера и DriverManager.
Все классы Драйвера, как ожидают, будут иметь статический инициализатор, который ответственен за создание экземпляра того Драйвера, и зарегистрируйте его в DriverManager, когда класс Драйвера загружается.
Кроме того, DriverManager.getConnection () является, вероятно, единственным пространством пользователя дружественный метод в классе. Большинство других методов обычно не используется большинством разработчиков, использующих API JDBC. Таким образом, старая пословица все еще стоит - используют Class.forName (), чтобы загрузить драйвер и затем использовать DriverManager.getConnection () для получения соединения с базой данных.
При чтении JavaDoc, на который это похоже, Class.forName требовался для начала, и затем вещи, измененные так, чтобы это больше не был предпочтенный путь (или необходимый путь).
Я должен сказать, Ваша жизнь будет намного легче при построении экземпляра драйвера, статически ссылаются на драйвер. После того как у Вас есть это, можно проигнорировать DriverManager
который сделанный из зла.