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