Соединение JDBC - Class.forName vs Class.forName(). NewInstance?

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

Ответ 1

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

Ответ 2

С драйвером, поддерживающим 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(), будут продолжать работать без изменений.