Интересно, почему работают Class.forName("com.mysql.jdbc.Driver");
и Class.forName("com.mysql.jdbc.Driver").newInstance();
, когда я использую их для подключения к базе данных. По правде говоря, не первый из них не должен работать, поскольку новый экземпляр не был создан. И все же он все еще работает. Я использую netbeans 6.9.1. Спасибо за ваш вклад!
Соединение JDBC - Class.forName vs Class.forName(). NewInstance?
Ответ 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(), будут продолжать работать без изменений.