Класс JDBC.forName vs DriverManager.registerDriver


в чем отличие от forName метод vs registerDriver загрузить и зарегистрировать драйвер JDBC?

3 52

3 ответа:

Class.forName() не имеет прямого отношения к JDBC вообще. Он просто загружает класс.

большинство классов драйверов JDBC регистрируют себя в своих статических инициализаторах, вызывая registerDriver().

registerDriver() это реальный вызов, который вам вряд ли когда-нибудь понадобится, чтобы позвонить себе (если вы не пишете свой собственный драйвер JDBC).

обратите внимание, что в JDBC 4 Вам не нужно один из тех если ваш драйвер JDBC обновлен, как драйверы можно найти с помощью механизмов определения местоположения службы вместо этого (т. е. просто оставьте этот вызов и откройте соединение, как обычно). Смотрите documentaton of DriverManager дополнительные сведения:

методы DriverManager getConnection и getDrivers были улучшены для поддержки механизма поставщика услуг Java Standard Edition. Драйверы JDBC 4.0 должны содержать файл META-INF/services/java.sql.Driver. Этот файл содержит имя реализации драйверов JDBC java.sql.Driver. Для например, чтобы загрузить my.sql.Driver класс META-INF/services/java.sql.Driver файл будет содержать запись:

my.sql.Driver

приложения больше не нужно явно загружать драйверы JDBC с помощью Class.forName(). Существующие программы, которые в настоящее время загружают драйверы JDBC с помощью Class.forName() будет продолжать работать без изменений.

никогда не называйте DriverManager.registerDriver() способ вручную. Спецификация JDBC требует, чтобы драйвер регистрировался сам при загрузке класса, и класс загружается через Class.forName(). В JDBC 4 драйверы могут быть загружены автоматически, просто находясь на пути к классу.

DriverManager.registerDriver() вручную потенциально опасно, так как это фактически приводит к тому, что драйвер регистрируется дважды. Если ваш код требует отменить регистрацию драйвера, чтобы предотвратить утечку памяти, то вы только в конечном итоге отмените регистрацию один раз и оставьте второй экземпляр зарегистрированным.

в дополнение к тому, что Йоахим Зауэр уже упоминал о драйверах JDBC 4, Обратите внимание, что на практике вы обычно хотите inject либо EntityManager (JPA) или объединенный источник данных (и использовать Jdbctemplate весны).