Ответ 1
Если вы проверите исходный код, вы увидите, что Java не пытается определить имя реализации драйвера (т.е. класс драйвера) из URL-адреса. Вместо этого он запрашивает каждую реализацию драйвера, которую он находит в пути к классам, если они могут обрабатывать этот URL-адрес или нет.
Порядок действий выглядит следующим образом:
- Когда вы запрашиваете соединение, загружается класс
DriverManager
. Он выполняет статический блок, который загружает все классы, указанные в системном свойствеjdbc.drivers
- Затем запускается механизм поставщика услуг и загружает все классы
java.sql.driver
, которые он находит в пути к классам.
Теперь, когда вы запрашиваете соединение, он проходит через зарегистрированные драйверы и вызывает Driver.connect(String url, Properties info) метод на них. Цитата:
Попытка подключения базы данных к данному URL-адресу. Водитель должен возвращать "null", если он понимает, что это неправильный тип драйвера для подключитесь к данному URL-адресу. Это будет распространено, например, когда драйвер JDBC менеджер просит подключиться к определенному URL-адресу, он передает URL-адрес каждому загруженный драйвер в свою очередь.
Водитель должен выбросить SQLException, если это правильный драйвер для подключитесь к данному URL-адресу, но у вас возникли проблемы с подключением к базе данных.
Таким образом, первым драйвером, который возвращает соединение без null
, является используемый драйвер.
Надеюсь, что поможет