2017-02-09 1 views
2

Я обнаружил, что метод Class.forName инициализирует статические блоки.Какой метод Class.forName() для JDBC?

Class.forName("com.mysql.jdbc.Driver").newInstance(); 

После jdbc 4.0 вам не нужно вызывать этот метод. Но люди всегда используют этот метод даже после версии jdbc 4.0. Мой вопрос, почему мне нужно использовать этот метод, если я использую jdbc 4.0? Какой метод Class.forName() для JDBC 4.0 и после?

Вот мой пример кода. Я добавляю mysql-connector.jar в свою библиотеку и когда запускаю этот код. Он отлично работает.

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306","root","root"); 
Statement stmt = con.createStatement(); 
System.out.println("Created DB Connection...."); 
+4

Просто люди копируют код. Если вы считаете, что вам это не нужно, попробуйте свой код без него. –

+2

Как говорится, «вам не нужно это делать в jdbc 4.0». Это означает, что он ничего не делает, и вам не нужно это вызывать. Почему люди все еще это делают? Сила привычки, невежество, «для безопасности» (в случае непредвиденного развертывания этого кода с помощью jdbc pre-4.0). Вы можете выбрать любой из вышеперечисленных, каждый из них будет применяться к кому-то. –

+0

Если jar-драйвер не находится в системном пути к классам, но только по пути пути к контексту (например, driver.jar является частью WAR-приложения для веб-приложений), то может потребоваться использовать «Class.forName» для загрузки драйвера. –

ответ

4

Он получает Class объект, представленный данной FQN. Если он не загружен ранее, он также загружает класс. Это имеет побочный эффект инициализации статических переменных класса и запуска любых статических блоков.

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

+1

Я думаю, вопрос задал вопрос, почему он * использовался * с более новыми образцами кода –

1

Вопрос: Как я знаю, что все используют jdbc 4.0, и вы этого не знаете. Вы добавляете это для людей, которые тестируют устаревшее или устаревшее оборудование.

+0

Вы не знаете, использует ли кто-то более старую версию. Тем не менее, всегда добавляя кучу защитных мер, вы не добьетесь успеха. Если кто-то запускает старую версию, пусть они справляются с этим сами. Они всегда знают больше об их рабочей среде, чем вы, в любом случае, вы не можете учитывать каждую библиотечную комбинацию. –

2

Это, по актуальным временам эксплуатации, довольно бессмысленно, за исключением одной вещи: если (0) неверно, то в строке runtime classpath эта строка кода скажет вам именно это.

Если эта строка кода будет удалена, вы получите общий сбой, когда код попытается создать соединение; который имеет несколько источников, включая еще одну очень распространенную ошибку, которая заключается в использовании неправильного URL-адреса JDBC-соединения. Это замалчивает воду, пытаясь устранить проблемы.

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