Соединение JDBC - Class.forName против Class.forName (). NewInstance? - PullRequest
10 голосов
/ 09 января 2011

Интересно, почему оба Class.forName("com.mysql.jdbc.Driver"); и Class.forName("com.mysql.jdbc.Driver").newInstance(); работают, когда я использую их для подключения к базе данных.По праву, первый не должен работать, так как новый экземпляр не был создан.И все же, это все еще работает.Я использую NetBeans 6.9.1.Спасибо за ваш вклад!

Ответы [ 2 ]

10 голосов
/ 09 января 2011

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

1 голос
/ 12 января 2011

С драйвером, который поддерживает jdbc 4.0, вам даже не нужен Class.forName (). Предполагается, что водитель имеет встроенный механизм, чтобы загружать себя на лету, когда DriverManager ищет его.

(ref: http://download.oracle.com/javase/6/docs/api/java/sql/DriverManager.html) Методы 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 (), будут продолжать работать без изменений.

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