я должен написать Class.forname ("com.mysql.jdbc.Driver") в каждом методе в Java? - PullRequest
1 голос
/ 20 августа 2011

При написании приложения, которое взаимодействует с базой данных, единственный способ заставить его работать - это написать Class.forName("com.mysql.jdbc.Driver") в каждом методе, который взаимодействует с базой данных.

Это единственный способ сделать это или есть более простой способ?

Ответы [ 2 ]

7 голосов
/ 20 августа 2011

Эта строка не может работать. jdbc:mysql://localhost/phone_book не является допустимым именем класса. Вы всегда получите исключение при выполнении этого метода.

Если вы имеете в виду Class.forname("com.mysql.jdbc.Driver"), все, что он делает, это проверяет, загрузчик классов загружает класс. Когда класс загружен, выполняется его статический блок, и этот статический блок регистрирует драйвер MySQL в API JDBC. Делать это один раз достаточно. Как только класс загружен, он загружается. Загрузка его во второй раз ничего не изменит.

3 голосов
/ 20 августа 2011

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(...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...