2011-01-09 19 views
10

se preguntaba por qué tanto Class.forName("com.mysql.jdbc.Driver"); y Class.forName("com.mysql.jdbc.Driver").newInstance(); trabajo cuando les utiliza para conectarse a una base de datos. Por derecho, no se supone que el primero debe funcionar, ya que no se creó ninguna instancia nueva. Y, sin embargo, todavía funciona. Estoy usando netbeans 6.9.1. ¡Gracias por tu contribución!Conexión JDBC- Class.forName vs Class.forName(). NewInstance?

Respuesta

10

Class.forName("xxx") no crea una conexión a la base de datos, solo carga el controlador JDBC y lo registra para que funcione la llamada DriverManager.getConnection(...) subsiguiente. Instanciar el controlador usted mismo no es necesario.

+0

gracias! una última qn- si la instancia, entonces la siguiente DriverManager.getConnection (..) no volverá a crear una instancia de nuevo, ¿correcto? ¿Lo hará solo si no lo instanciaste en el primer paso? – OckhamsRazor

+0

Sospecho que con solo cargar la clase, el administrador del controlador ya lo ha instanciado, desencadenado por un bloque estático en el controlador. Para ser honesto, no estoy del todo seguro. Si desea utilizar el controlador que ha instanciado (por ejemplo, para envolverlo), debe evitar el uso de DriverManager para obtener conexiones, o registrar su propia instancia de controlador utilizando los métodos estáticos de DriverManager. – araqnid

1

con un conductor que soporta JDBC 4.0 que ni siquiera necesita Class.forName(). El conductor se supone que tiene en el mecanismo incorporado a cargarse sobre la marcha, cuando DriverManager mira hacia arriba para él.

(ref: http://download.oracle.com/javase/6/docs/api/java/sql/DriverManager.html) Los métodos de DriverManager getConnection y getDrivers se han mejorado para admitir el mecanismo del proveedor de servicios 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 podría incluir la indicación

my.sql.Driver

aplicaciones ya no tienen que explicitamente cargue los controladores JDBC utilizando Class.forName(). Los programas existentes que actualmente cargan controladores JDBC utilizando Class.forName() continuarán funcionando sin modificaciones.