Что будет команда
Class.forName("oracle.jdbc.driver.OracleDriver")
точно при подключении к базе данных Oracle? Есть ли альтернативный способ сделать то же самое?
Что будет команда
Class.forName("oracle.jdbc.driver.OracleDriver")
точно при подключении к базе данных Oracle? Есть ли альтернативный способ сделать то же самое?
Получает ссылку на объект класса с 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
.)
Он регистрирует драйвер; что-то вроде формы:
public class SomeDriver implements Driver {
static {
try {
DriverManager.registerDriver(new SomeDriver());
} catch (SQLException e) {
// TODO Auto-generated catch block
}
}
//etc: implemented methods
}
В предыдущих версиях JDBC для получения соединения вам сначала пришлось инициализировать драйвер JDBC, вызвав метод
Class.forName
. Все драйверы JDBC 4.0, которые находятся в вашем пути к классу, автоматически загружаются. (Однако вы должны вручную загрузить все драйверы до JDBC 4.0 с помощью методаClass.forName
.)
Итак, если вы используете драйвер Oracle 11g (11.1) с Java 1.6, вам не нужно вызывать Class.forName
. В противном случае вам нужно вызвать его для инициализации драйвера.
Pre Java 6 класс DriverManager
не знал бы, какой драйвер JDBC вы хотите использовать. Class.forName("...")
был способом предварительной загрузки классов драйвера.
Если вы используете Java 6, вам больше не нужно это делать.
Альтернативой использовать свойство jdbc.drivers System указать необходимые драйверы в командной строке при запуске JVM.
Эта команда загружает класс драйвера Oracle jdbc для доступа к экземпляру DriverManager. После загрузки класса система может подключиться к Oracle, используя ее. В качестве альтернативы вы можете использовать метод registerDriver для DriverManager и передать его с помощью экземпляра драйвера JDBC, который вам нужен.
Используйте 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
}
}
}
%>