java - getconnection - cuál es el propósito del método class forname cuando hablamos de jdbc
¿Para qué sirve Class.forName() si no utiliza el valor de retorno? (6)
He visto esta línea en una aplicación de muestra para usar un controlador JDBC comercial:
Class.forName("name.of.a.jcdb.driver")
El valor de retorno no se utiliza.
¿Para qué sirve esta línea?
En el caso de los controladores JDBC, el inicializador estático de la clase solicitada registrará el controlador con el java.sun.com/javase/6/docs/api/java/sql/DriverManager.html de JDBC para que funcione una conexión para una URL específica del controlador.
En su ejemplo específico, la clase de controlador JDBC contiene un intializer estático que registra el controlador que se encuentra en el DriverManager .
Esto se utiliza en particular para los controladores JDBC. La clase de controlador JDBC tiene un bloque de inicializador estático que registra la clase con el DriverManager JDBC, de modo que DriverManager conoce el controlador cuando más tarde abre una conexión de base de datos.
En una versión más reciente de JDBC (JDBC 3.0, creo), esto ya no es necesario, DriverManager utiliza un mecanismo diferente para encontrar controladores JDBC.
editar : esta página explica en detalle cómo funciona la carga de un controlador JDBC y cómo el controlador se registra con el DriverManager (la forma anterior).
Realiza una carga estática de esa clase. Así que cualquier cosa en el bloque static { }
, se ejecutará.
Tal vez algún fragmento de código ayude. Esto es del controlador de puente JDBC-ODBC de Sun,
//--------------------------------------------------------------------
// Static method to be executed when the class is loaded.
//--------------------------------------------------------------------
static
{
JdbcOdbcTracer tracer1 = new JdbcOdbcTracer();
if (tracer1.isTracing ()) {
tracer1.trace ("JdbcOdbcDriver class loaded");
}
JdbcOdbcDriver driver = new JdbcOdbcDriver ();
// Attempt to register the driver
try {
DriverManager.registerDriver (driver);
}
catch (SQLException ex) {
if (tracer1.isTracing ()) {
tracer1.trace ("Unable to register driver");
}
}
}
la llamada DriverManager.registerDriver()
en un bloque estático se ejecuta siempre que el controlador se carga a través de Class.forName()
.
Esta solía ser la única forma de registrar el controlador. JDBC 4.0 introdujo un nuevo mecanismo de registro de servicio, por lo que ya no necesita hacer esto con los controladores JDBC 4.0 más nuevos.
para manejar la clase de carga en el actual classloader