2011-01-09 6 views
10

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

ответ

10

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

+0

спасибо! один последний qn- если u его экземпляр, то последующий DriverManager.getConnection (..) не будет повторно повторять его снова, правильно? Он будет делать это, только если вы не создали его на первом этапе? – OckhamsRazor

+0

Я подозреваю, что просто загружая класс, диспетчер драйверов уже создал его, вызванный статическим блоком в драйвере. Честно говоря, я не совсем уверен. Если вы хотите использовать созданный вами экземпляр (например, обернуть его), вам нужно либо избегать использования DriverManager для получения подключений, либо зарегистрировать собственный экземпляр драйвера, используя статические методы DriverManager. – araqnid

1

С драйвером, поддерживающим 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/услуги/java.sql.Driver файл будет содержать запись:

my.sql.Driver

Приложения больше не нужно для Явно загрузите драйверы JDBC, используя Class.forName(). Существующие программы, которые в настоящее время загружают драйверы JDBC с использованием Class.forName(), будут продолжать работать без изменений.

Смежные вопросы