Invoking Class.forName(<jdbcDriverClass>)
служит для загрузки драйвера JDBC (который реализует интерфейс java.sql.Driver
).Загрузка класса драйвера JDBC приводит к вызову статических инициализаторов в Driver
, и большинство, если не все драйверы, вызывают DriverManager.registerDriver(jdbcDriverInstance)
в статическом инициализаторе.
Соответствующий вызов методаслужит для регистрации драйвера JDBC с помощью DriverManager
, позволяя методам DriverManager.getConnection
возвращать соединение с базой данных, которая поддерживается драйвером JDBC.Каждый драйвер JDBC распознает только один / несколько форматов соединений URL JDBC, и когда вы вызываете DriverManager.getConnection(...)
, класс DriverManager
циклически перебирает все зарегистрированные драйверы, и только драйвер, который распознает формат URL соединения, вернет соединение.
Исходя из вышесказанного, Class.forname("jdbc:mysql://localhost/phone_book")
не имеет смысла в этом контексте, поскольку jdbc:mysql://localhost/phone_book
не является классом драйвера JDBC.Скорее это формат URL соединения.Поскольку вы заинтересованы в доступе к экземпляру базы данных MySQL, вам следует использовать класс драйвера MySQL Connector / J driver: Class.forName("com.mysql.jdbc.Driver")
.Когда вам нужно получить доступ к экземпляру базы данных, вы должны использовать URL JDBC как: DriverManager.getConnection("jdbc:mysql://localhost/phone_book");
.Вы можете передать идентификатор пользователя и пароль, используя трехпараметрический вариант метода DriverManager.getConnection(...)
.