Что будет команда
Class.forName("oracle.jdbc.driver.OracleDriver")
точно делать при подключении к базе данных Oracle? Есть ли другой способ сделать то же самое?
Что будет команда
Class.forName("oracle.jdbc.driver.OracleDriver")
точно делать при подключении к базе данных Oracle? Есть ли другой способ сделать то же самое?
A
где я вызываю конструктор Class.forName("oracle.jdbc.driver.OracleDriver")
класса A
, и я создаю A's
объект для получения поля подключения для каждого сервлета, где мне нужно подключение, тогда java пропустит Class.forName("oracle.jdbc.driver.OracleDriver")
или загрузится снова?
Ответы:
Он получает ссылку на объект класса с FQCN (полное имя класса) oracle.jdbc.driver.OracleDriver
.
Он ничего не «делает» с точки зрения подключения к базе данных, кроме обеспечения того, чтобы указанный класс был загружен текущим загрузчиком классов . Нет принципиальной разницы между написанием
Class<?> driverClass = Class.forName("oracle.jdbc.driver.OracleDriver");
// and
Class<?> stringClass = Class.forName("java.lang.String");
Class.forName("com.example.some.jdbc.driver")
вызовы отображаются в устаревшем коде, который использует JDBC, потому что это устаревший способ загрузки драйвера JDBC .
Из учебника по Java :
В предыдущих версиях JDBC для получения соединения сначала нужно было инициализировать драйвер JDBC, вызвав метод
Class.forName
. Этим методам требуется объект типаjava.sql.Driver
. Каждый драйвер JDBC содержит один или несколько классов, реализующих интерфейсjava.sql.Driver
.
...
Любые драйверы JDBC 4.0, обнаруженные в пути к вашему классу, загружаются автоматически. (Однако вы должны вручную загрузить любые драйверы до JDBC 4.0 с помощью этого методаClass.forName
.)
Class.forName()
без захвата ссылки на возвращаемый driverClass, поэтому на первый взгляд это кажется бездействующей операцией
Class.forName("etc.driver")
?
Class.forName(...)
.
Из учебника Java JDBC :
В предыдущих версиях JDBC для получения соединения сначала нужно было инициализировать драйвер JDBC, вызвав метод
Class.forName
. Все драйверы JDBC 4.0, обнаруженные в пути к классу, загружаются автоматически. (Однако вы должны вручную загрузить все драйверы до JDBC 4.0 с помощью этого методаClass.forName
.)
Итак, если вы используете драйвер Oracle 11g (11.1) с Java 1.6, вам не нужно вызывать Class.forName
. В противном случае вам нужно вызвать его для инициализации драйвера.
Class.forName
силах вызова загрузчик классов для загрузки данного класса. Это шаг ручной загрузки, описанный в руководстве.
class.forName();
:)
До Java 6 DriverManager
класс не знал, какой драйвер JDBC вы хотите использовать.Class.forName("...")
был способ предварительной загрузки классов драйверов.
Если вы используете Java 6, вам больше не нужно этого делать.
Эта команда загружает класс драйвера Oracle jdbc, который будет доступен для экземпляра DriverManager. После загрузки класса система может подключиться к Oracle с его помощью. В качестве альтернативы вы можете использовать метод registerDriver в DriverManager и передать его с экземпляром необходимого драйвера JDBC.
В качестве альтернативы можно использовать системное свойство jdbc.drivers, чтобы указать необходимые драйверы в командной строке при запуске JVM.
Используйте oracle.jdbc.OracleDriver, а не oracle.jdbc.driver.OracleDriver. Вам не нужно регистрировать его, если файл jar драйвера находится в каталоге «WEB-INF \ lib», если вы используете Tomcat. Сохраните его как test.jsp и поместите в свой веб-каталог, а затем повторно разверните папку веб-приложения в диспетчере Tomcat:
<%@ page import="java.sql.*" %>
<HTML>
<HEAD>
<TITLE>Simple JSP Oracle Test</TITLE>
</HEAD><BODY>
<%
Connection conn = null;
try {
Class.forName("oracle.jdbc.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@XXX.XXX.XXX.XXX:XXXX:dbName", "user", "password");
Statement stmt = conn.createStatement();
out.println("Connection established!");
}
catch (Exception ex)
{
out.println("Exception: " + ex.getMessage() + "");
}
finally
{
if (conn != null) {
try {
conn.close();
}
catch (Exception ignored) {
// ignore
}
}
}
%>