@EgoRedMC

Зачем нужен Driver при подключении к базе данных?

Здравствуйте.
Я начал изучать базы данных в Java, нашел много разных статей, уроков. Многие вводят экземпляр класса com.mysql.cj.jbdc.Driver и регистрируют его в DriverManager, после чего он не применяется, кто-то регистрирует его через Class.forName("com.mysql.jdbc.Driver").newInstance(), кто-то не прописывет его вообще, однако CRUD запросы это выполнять не мешает.
Собственно, вопрос: нужен ли этот самый драйвер, если все запросы выполняются, и если да, то зачем?
  • Вопрос задан
  • 2890 просмотров
Пригласить эксперта
Ответы на вопрос 2
@ivan19631224
Технически это происходит обычно так. Когда вы вызываете Class.forName("..."), JVM подгружает этот класс и вызывает статический инициализатор этого класса. В случае с JDBC драйверами они, как правило, там вызывают статический метод DriverManager.registerDriver(...) и регистрируют сами себя (пример для mysql). Регистрация представляет собой просто сохранение во внутреннем статическом списке. Далее, когда вы вызываете DriverManager.getConnection(jdbcUrl), DriverManager по этой jdbcUrl ищет подходящий драйвер (дёргая метод acceptsURL, который должны реализовывать все драйверы), далее подключается с помощью метода connect этого драйвера. Конечно, есть ещё много нюансов, особенно если касаться web приложений.
Чтобы вызывали Class.forName("...").newInstance() я не видел, это вроде ничем не отличается от просто new com.mysql.jdbc.Driver().
Собственно, ответ на вопрос: да, конечно нужен. Драйвер реализует общение приложения с базой данных (т.е. передачу SQL запросов в БД и возврат результатов), без него никак. Если вы не видите, что класс драйвера и его настройки прописаны явно, скорее всего где то во внутренностях кода/ресурсов они всё таки есть.
Ответ написан
Комментировать
@AtaZ
кто знает, тот поймет
Слово драйвер ("водитель") в первую очередь означает элемент который будет направлять ваши запросы к базе данных и возвращать вам ответы. К множеству баз данных свой драйвер, поэтому его и надо означить. Собственно как и в других языках код не обращается напрямую к драйверу, драйвер в данном случае выступает как константа определяющая вид запроса на более низком уровне.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы