Интересно, почему и Class.forName("com.mysql.jdbc.Driver");
, и Class.forName("com.mysql.jdbc.Driver").newInstance();
работают, когда я использую их для подключения к базе данных. По правде говоря, не первый из них не должен работать, поскольку новый экземпляр не был создан. И все же он все еще работает. Я использую netbeans 6.9.1. Спасибо за ваш вклад!JDBC подключение- Class.forName vs Class.forName(). НовыйInstance?
ответ
Class.forName("xxx")
не создает соединение с базой данных, он просто загружает драйвер JDBC и регистрирует его так, что последующий вызов DriverManager.getConnection(...)
будет работать. Игнорирование самого драйвера не требуется.
С драйвером, поддерживающим 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(), будут продолжать работать без изменений.
- 1. Использование Class.forName в JDBC
- 2. Какой метод Class.forName() для JDBC?
- 3. Необходим ли механизм Class.forName()?
- 4. Java Class.forName, JDBC драйвер подключения нагрузки
- 5. jdbc connection "альтернатива Class.forname для загрузки драйвера"
- 6. Class.forName() кэширование
- 7. Class.forName (Driver.class)
- 8. Class.forName Исключение
- 9. JDBC4 и Class.forName
- 10. ClassNotFoundException from Class.forName ("com.mysql.jdbc.Driver");
- 11. Class.forName ("org.postgresql.Driver") error
- 12. Class.forName в SQL-сервере
- 13. Что означает Class.forName()
- 14. String.class.cast (var) vs. Class.forName ("java.lang.String"). Cast (var)
- 15. Класс Literal vs Class.forname + Java Generics
- 16. Class.forName все еще кажется необходимым
- 17. Какова цель класса Class.forName («MY_JDBC_DRIVER»)?
- 18. Разница между Class.forName («Что-то») и Class.forName («Что-то»). NewInstance();
- 19. ClassLoader и Class.forName()
- 20. Class.forName() бросает ClassNotFoundException
- 21. Calling Class.forName() дважды
- 22. Generics и Class.forName
- 23. Class.forName ("oracle.jdbc.OracleDriver"); Не работает
- 24. Class.forName() - JDK7 - ClassNotFoundException
- 25. Почему class.forName полезен
- 26. Как защитить Class.forName («SimpleClass»)?
- 27. ClassNotFoundException при использовании Class.forName()
- 28. scala Class.forName образец соответствует
- 29. Как защитить Class.forName («com.mysql.jdbc.Driver)?
- 30. Class.forName (clazz.getName()); throw java.lang.ClassNotFoundException
спасибо! один последний qn- если u его экземпляр, то последующий DriverManager.getConnection (..) не будет повторно повторять его снова, правильно? Он будет делать это, только если вы не создали его на первом этапе? – OckhamsRazor
Я подозреваю, что просто загружая класс, диспетчер драйверов уже создал его, вызванный статическим блоком в драйвере. Честно говоря, я не совсем уверен. Если вы хотите использовать созданный вами экземпляр (например, обернуть его), вам нужно либо избегать использования DriverManager для получения подключений, либо зарегистрировать собственный экземпляр драйвера, используя статические методы DriverManager. – araqnid