|
|
|
Зачем Class.forName(sDriver).newInstance() при коннекте к БД
|
|||
|---|---|---|---|
|
#18+
Вопрос наверное покажется нубским, но все же. Собственно имеется код, честно списанный и переделанный от другого человека: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. так вот интересует зачем в методе getConnection вызывается Код: java 1. и, так сказать, уходит в провода? или же в этом есть некий тайный смысл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 21:56:23 |
|
||
|
Зачем Class.forName(sDriver).newInstance() при коннекте к БД
|
|||
|---|---|---|---|
|
#18+
Этим способом мы говорим JVM, а ну-ка загрузи и инициализируй нам данный класс. Класс-драйвер тоже не дурак, во время инициализации регистрирует себя в DriverManager. Некоторые старые драйвера не регистрировали себя через статический инициализатор. Поэтому Class.forName для них не достаточно. newInstance() вызывает дефолтный конструктор, который и регестрирует драйвера в DriverManager-е. Современным драйверам newInstance() делать не обязательно. Просто страховка на "мало ли что". В промышленном программировании этот код вообще не применяется. Потому что в любых Enterprise системах используются фреймверки и API, которые это всё сами делают из указанных им настроек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 22:01:07 |
|
||
|
Зачем Class.forName(sDriver).newInstance() при коннекте к БД
|
|||
|---|---|---|---|
|
#18+
PRince_SOT, Есть смысл. newInstance() там не нужно, а Class.forName(sDriver) загружает драйвер, выполняется статический метод драйвера, который регистрирует его в DriverManager. После этого им можно пользоваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 22:04:10 |
|
||
|
Зачем Class.forName(sDriver).newInstance() при коннекте к БД
|
|||
|---|---|---|---|
|
#18+
То есть, если я уберу эту строчку - при попытке коннекта у меня все рухнет? Интересно... Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 22:06:53 |
|
||
|
Зачем Class.forName(sDriver).newInstance() при коннекте к БД
|
|||
|---|---|---|---|
|
#18+
PRince_SOT, Рухнет, если драйвер ниже JDBC 4.0, иначе зарегистрируется без вашей помощи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 22:18:12 |
|
||
|
Зачем Class.forName(sDriver).newInstance() при коннекте к БД
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЭтим способом мы говорим JVM, а ну-ка загрузи и инициализируй нам данный класс. Класс-драйвер тоже не дурак, во время инициализации регистрирует себя в DriverManager. Некоторые старые драйвера не регистрировали себя через статический инициализатор. Поэтому Class.forName для них не достаточно. newInstance() вызывает дефолтный конструктор, который и регестрирует драйвера в DriverManager-е. Современным драйверам newInstance() делать не обязательно. Просто страховка на "мало ли что". .. Воoбще-то драйвера всегда обязаны были себя регистрировать именно через static-инициализатор. java.sql.Driver JDBC 1.0When a Driver class is loaded, it should create an instance of itself and register it with the DriverManager. This means that a user can load and register a driver by doing Class.forName("foo.bah.Driver"). Если какие-то старые драйвера не делают так, как обязаны, если уж называют себя JDBC-драйверами, то смысл рассчитывать на что-то что они и делать-то необязаны? Мне кажется, что Class.forName("foo.bah.Driver") было достаточно всегда, а newInstance() было излишним всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2013, 16:01:18 |
|
||
|
Зачем Class.forName(sDriver).newInstance() при коннекте к БД
|
|||
|---|---|---|---|
|
#18+
J.SergeЕсли какие-то старые драйвера не делают так, как обязаны, если уж называют себя JDBC-драйверами, то смысл рассчитывать на что-то что они и делать-то необязаны? Мне кажется, что Class.forName("foo.bah.Driver") было достаточно всегда, а newInstance() было излишним всегда. В теории всё так. На практике - не всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2013, 20:30:30 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38222724&tid=2129552]: |
0ms |
get settings: |
16ms |
get forum list: |
20ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
45ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 332ms |
| total: | 508ms |

| 0 / 0 |
