JDBC Class.forName vs DriverManager.registerDriver

¿Cuál es la diferencia entre el método forName y el registerDriver para cargar y registrar un controlador JDBC?

Class.forName() no está directamente relacionado con JDBC. Simplemente carga una clase.

La mayoría de las clases de controladores JDBC se registran en sus inicializadores estáticos llamando a registerDriver() .

registerDriver() es la llamada real que casi nunca necesita llamarse usted mismo (a menos que escriba su propio controlador JDBC).

Tenga en cuenta que en JDBC 4 no debería necesitar ninguno de los dos si su controlador JDBC está actualizado, ya que los controladores se pueden encontrar usando los mecanismos de ubicación del servicio (es decir, simplemente omita esa llamada y abra su conexión como de costumbre). Vea la documentación de DriverManager para más detalles:

Los métodos de DriverManager getConnection y getDrivers se han mejorado para admitir el mecanismo de proveedor de servicios de Java Standard Edition. Los controladores JDBC 4.0 deben incluir el archivo META-INF/services/java.sql.Driver . Este archivo contiene el nombre de la implementación de los controladores JDBC de java.sql.Driver . Por ejemplo, para cargar la clase my.sql.Driver , el archivo META-INF/services/java.sql.Driver contendría la entrada:

 my.sql.Driver 

Las aplicaciones ya no necesitan cargar explícitamente los controladores JDBC usando Class.forName() . Los progtwigs existentes que actualmente cargan controladores JDBC utilizando Class.forName() continuarán funcionando sin modificaciones.

Nunca llame al método DriverManager.registerDriver() manualmente. La especificación JDBC requiere que un controlador se registre cuando se carga la clase, y la clase se carga a través de Class.forName() . En JDBC 4, los controladores pueden cargarse automáticamente solo estando en la ruta de clase.

DriverManager.registerDriver() manualmente es potencialmente peligroso ya que hace que el controlador se registre dos veces. Si su código requiere que anule el registro de un Controlador para evitar una pérdida de memoria, solo terminaría desregistrando una vez y dejaría una segunda instancia registrada.

Además de lo que Joachim Sauer ya mencionó sobre los controladores JDBC 4, tenga en cuenta que, en la práctica, generalmente desea inyectar un EntityManager (JPA) o un DataSource agrupado (y usar JdbcTemplate of Spring).