Каково фактическое использование Class.forName( "oracle.jdbc.driver.OracleDriver" ) при подключении к базе данных?
Что будет команда
Class.forName("oracle.jdbc.driver.OracleDriver")
точно при подключении к базе данных Oracle? Есть ли альтернативный способ сделать то же самое?
Ответы
Ответ 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, вам больше не нужно это делать.
Ответ 5
Альтернативой использовать свойство jdbc.drivers System указать необходимые драйверы в командной строке при запуске JVM.
Ответ 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
}
}
}
%>