Подтвердить что ты не робот

Каково фактическое использование Class.forName( "oracle.jdbc.driver.OracleDriver" ) при подключении к базе данных?

Что будет команда

Class.forName("oracle.jdbc.driver.OracleDriver")

точно при подключении к базе данных Oracle? Есть ли альтернативный способ сделать то же самое?

4b9b3361

Ответ 1

Получает ссылку на объект класса с 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.)

Дальнейшее чтение (читайте: вопросы это дуплекс)

Ответ 2

Он регистрирует драйвер; что-то вроде формы:

public class SomeDriver implements Driver {
  static {
    try {
      DriverManager.registerDriver(new SomeDriver());
    } catch (SQLException e) {
      // TODO Auto-generated catch block
    }
  }

  //etc: implemented methods
}

Ответ 3

Из учебника Java JDBC:

В предыдущих версиях JDBC для получения соединения вам сначала пришлось инициализировать драйвер JDBC, вызвав метод Class.forName. Все драйверы JDBC 4.0, которые находятся в вашем пути к классу, автоматически загружаются. (Однако вы должны вручную загрузить все драйверы до JDBC 4.0 с помощью метода Class.forName.)

Итак, если вы используете драйвер Oracle 11g (11.1) с Java 1.6, вам не нужно вызывать Class.forName. В противном случае вам нужно вызвать его для инициализации драйвера.

Ответ 4

Pre Java 6 класс DriverManager не знал бы, какой драйвер JDBC вы хотите использовать. Class.forName("...") был способом предварительной загрузки классов драйвера.

Если вы используете Java 6, вам больше не нужно это делать.

Ответ 6

Эта команда загружает класс драйвера Oracle jdbc для доступа к экземпляру DriverManager. После загрузки класса система может подключиться к Oracle, используя ее. В качестве альтернативы вы можете использовать метод registerDriver для DriverManager и передать его с помощью экземпляра драйвера JDBC, который вам нужен.

Ответ 7

Используйте 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
        }
    }
}

%>