¿Qué será el comando
Class.forName("oracle.jdbc.driver.OracleDriver")
exactamente mientras se conecta a una base de datos de Oracle? ¿Existe una forma alternativa de hacer lo mismo?
¿Qué será el comando
Class.forName("oracle.jdbc.driver.OracleDriver")
exactamente mientras se conecta a una base de datos de Oracle? ¿Existe una forma alternativa de hacer lo mismo?
A
donde llamo Class.forName("oracle.jdbc.driver.OracleDriver")
al A
constructor de la clase , y creo un A's
objeto para obtener el campo de conexión para cada servlet donde necesito conexión, entonces java saltará Class.forName("oracle.jdbc.driver.OracleDriver")
o se cargará nuevamente.
Respuestas:
Obtiene una referencia al objeto de clase con el FQCN (nombre de clase totalmente calificado) oracle.jdbc.driver.OracleDriver
.
No "hace" nada en términos de conectarse a una base de datos, aparte de garantizar que el cargador de clases actual cargue la clase especificada . No hay diferencia fundamental entre escribir
Class<?> driverClass = Class.forName("oracle.jdbc.driver.OracleDriver");
// and
Class<?> stringClass = Class.forName("java.lang.String");
Class.forName("com.example.some.jdbc.driver")
las llamadas aparecen en código heredado que usa JDBC porque esa es la forma heredada de cargar un controlador JDBC .
Desde el tutorial de Java :
En versiones anteriores de JDBC, para obtener una conexión, primero tenía que inicializar su controlador JDBC llamando al método
Class.forName
. Estos métodos requieren un objeto de tipojava.sql.Driver
. Cada controlador JDBC contiene una o más clases que implementan la interfazjava.sql.Driver
.
...
Todos los controladores JDBC 4.0 que se encuentran en su ruta de clases se cargan automáticamente. (Sin embargo, debe cargar manualmente cualquier controlador anterior a JDBC 4.0 con el métodoClass.forName
).
Class.forName()
sin capturar la referencia al driverClass devuelto, por lo que a primera vista parece una operación no operativa
Class.forName("etc.driver")
?
Class.forName(...)
.
Desde el tutorial de Java JDBC :
En versiones anteriores de JDBC, para obtener una conexión, primero tenía que inicializar su controlador JDBC llamando al método
Class.forName
. Todos los controladores JDBC 4.0 que se encuentran en su ruta de clases se cargan automáticamente. (Sin embargo, debe cargar manualmente cualquier controlador anterior a JDBC 4.0 con el métodoClass.forName
).
Por lo tanto, si está utilizando el controlador Oracle 11g (11.1) con Java 1.6, no necesita llamar Class.forName
. De lo contrario, debe llamarlo para inicializar el controlador.
Class.forName
llamada obliga al cargador de clases a cargar la clase dada. Este es el paso de carga manual descrito en el tutorial.
class.forName();
:)
Antes de Java 6, la DriverManager
clase no habría sabido qué controlador JDBC quería usar. Class.forName("...")
era una forma de precargar las clases de controladores.
Si está utilizando Java 6, ya no necesita hacer esto.
Este comando carga la clase del controlador jdbc de Oracle para que esté disponible para la instancia de DriverManager. Una vez cargada la clase, el sistema puede conectarse a Oracle usándola. Como alternativa, puede usar el método registerDriver de DriverManager y pasarlo con la instancia del controlador JDBC que necesita.
Una alternativa sería utilizar la propiedad del sistema jdbc.drivers para especificar los controladores necesarios en la línea de comandos cuando inicie la JVM.
Utilice oracle.jdbc.OracleDriver, no oracle.jdbc.driver.OracleDriver. No es necesario que lo registre si el archivo jar del controlador está en el directorio "WEB-INF \ lib", si está utilizando Tomcat. Guarde esto como test.jsp y colóquelo en su directorio web, y vuelva a implementar la carpeta de su aplicación web en el administrador de 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
}
}
}
%>