Класс JDBC.forName vs DriverManager.registerDriver
в чем отличие от forName метод vs registerDriver загрузить и зарегистрировать драйвер JDBC?
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. Этот файл содержит имя реализации драйверов JDBCjava.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()вручную потенциально опасно, так как это фактически приводит к тому, что драйвер регистрируется дважды. Если ваш код требует отменить регистрацию драйвера, чтобы предотвратить утечку памяти, то вы только в конечном итоге отмените регистрацию один раз и оставьте второй экземпляр зарегистрированным.