Какой подход лучше загрузить драйвер JDBC? - PullRequest
7 голосов
/ 01 апреля 2009

Существует два способа загрузки драйвера:

  1. Class.forName()

  2. DriverManager.registerDriver()

Метод 1 внутренне также вызывает DriverManager.registerDriver, и метод 1 является предпочтительным.

Но почему? Есть ли небольшая разница или производительность и т.д. лучше?
Любые мнения приветствуются ..

Ответы [ 5 ]

3 голосов
/ 02 апреля 2009

Если вы используете 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 и т. Д., В зависимости от того, что удобно для вашего приложения.

2 голосов
/ 02 апреля 2009

Справочник и справочник по JDBC API - лучший справочник по таким вопросам, раздел , посвященный роли классов Driver и DriverManager .

Ожидается, что все классы драйверов будут иметь статический инициализатор, который отвечает за создание экземпляра этого драйвера, и зарегистрировать его в DriverManager, когда класс драйверов загружен.

Кроме того, DriverManager.getConnection (), вероятно, является единственным дружественным для пользователя методом в классе. Большинство других методов обычно не используются большинством разработчиков, использующих JDBC API. Таким образом, старая поговорка остается в силе - используйте Class.forName () для загрузки драйвера, а затем используйте DriverManager.getConnection () для получения соединения с базой данных.

1 голос
/ 02 апреля 2009

"производительность и т. Д. Лучше?"

Я бы сказал, что производительность для этой разовой операции меньше всего вас беспокоит.

Если вы используете сервер приложений Java EE, ответ «ни один». Вы должны настроить пул соединений и позволить ему обрабатывать загрузку драйвера и раздачу соединений.

1 голос
/ 01 апреля 2009

Я должен сказать, что ваша жизнь будет намного проще, если вы создадите экземпляр драйвера, статически ссылаясь на драйвер. Если у вас есть это, вы можете игнорировать DriverManager, сделанное из зла.

1 голос
/ 01 апреля 2009

При чтении JavaDoc создается впечатление, что Class.forName требовалось начать, а затем все изменилось, так что это больше не был предпочтительный (или обязательный) путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...