2009-04-01 18 views
7

Hay dos maneras de cargar un conductor:¿Qué enfoque es mejor cargar un controlador JDBC?

  1. Class.forName()

  2. DriverManager.registerDriver()

Método 1 llama internamente también DriverManager.registerDriver y el método 1 es la forma preferida.

¿Pero por qué? ¿Hay alguna pequeña diferencia o es el rendimiento, etc. mejor?
Cualquier punto de vista se aprecian ..

Respuesta

3

Si usa Class.forName(), no es necesario que tenga ninguna dependencia de tiempo de compilación en un controlador JDBC en particular. Esto es particularmente útil cuando escribe código que puede funcionar con una variedad de bases de datos.

Considere el siguiente código:

// Register the PostgreSQL driver 
Class.forName("org.postgresql.Driver"); 

Ahora compararlo con:

import org.postgresql.Driver; 

// Register the PostgreSQL driver 
DriverManager.registerDriver(new Driver()); 

y considerar que en el primer ejemplo, el nombre de la clase también podría haber venido de un archivo de propiedades, archivo XML , etc., según lo que sea conveniente para su aplicación.

1

Lectura de la JavaDoc parece que Class.forName se requiere para comenzar, y, a continuación, las cosas cambiaron por lo que ya no era la forma preferida (o la forma requerida).

+0

Um ... No creo que el enlace sea correcto. –

+0

arreglado, gracias (estaba leyendo lo que estaba diciendo y creo que olvidé volver a tomar el enlace :-) – TofuBeer

1

Tengo que decir que su vida será mucho más fácil si construye una instancia de controlador haciendo una referencia estática del controlador. Una vez que tenga eso, puede ignorar DriverManager que hizo del mal.

2

El JDBC API Tutorial and Reference es la mejor referencia para estas preguntas, un section of which addresses the role played by the Driver and DriverManager classes.

Se espera que todas las clases de controlador tengan un inicializador estático que sea responsable de crear una instancia de ese Controlador, y registrarlo con el DriverManager, cuando se carga la clase Driver.

Además, DriverManager.getConnection() es probablemente el único método amigable de espacio de usuario en la clase. La mayoría de los otros métodos no suelen ser utilizados por la mayoría de los desarrolladores que utilizan la API de JDBC. Así que el viejo adagio sigue en pie: use Class.forName() para cargar el controlador, y luego use DriverManager.getConnection() para obtener una conexión a la base de datos.

1

"¿es mejor el rendimiento, etc.?"

Yo diría que el rendimiento de esta operación de una sola vez es la menor de sus preocupaciones.

Si está utilizando un servidor de aplicaciones Java EE, la respuesta es "ninguno". Debería configurar un grupo de conexiones y dejar que maneje la carga del controlador y la distribución de las conexiones.

+0

estoy de acuerdo con su punto. – harshit

Cuestiones relacionadas