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
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.
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.
- 1. Genéricos y Class.forName
- 2. ¿Cuál es el propósito de 'Class.forName ("MY_JDBC_DRIVER")'?
- 3. Class.forName está dando ClassNotFound Excepción
- 4. Java: Diferencia entre Class.forName y ClassLoader.loadClass
- 5. ¿Es posible hacer que Class.forName ("") sea flexible?
- 6. Diferencia entre MyClass.class y Class.forName ("className")
- 7. Instantiate anidado clase estática usando Class.forName
- 8. newInstance() vs new
- 9. En Java, conectando a mysql, ¿cuál es el significado de Class.forName?
- 10. Conexión Postgres JDBC en Eclipse Ayuda
- 11. Spring JDBC vs JDBC
- 12. ¿Usará class.forname varias veces para causar pérdida de memoria? (ejecutándose dentro de tomcat)
- 13. Python - Conexión a JDBC
- 14. Conexión JDBC segura
- 15. Conexión JDBC colgando
- 16. JDBC- postgres, conexión rechazada
- 17. ¿Cuál es la cadena de conexión del controlador JDBC de MySQL?
- 18. Python 3 - Conexión con JDBC
- 19. Buenas prácticas: JDBC de conexión
- 20. Conexión JDBC con reconexión automática
- 21. Conexión JDBC usando diferentes archivos
- 22. Diferencia entre Spring JDBC Vs Plain JDBC?
- 23. ORM Technologies vs JDBC?
- 24. Cómo utilizar un controlador JDBC desde una ubicación arbitraria
- 25. Una conexión persistente con JDBC a MySQL
- 26. Conexión a SQL Server LocalDB utilizando JDBC
- 27. Almacenar una conexión JDBC en HttpSession
- 28. MS SQL Server y JDBC: cerrado conexión
- 29. Java JDBC estado de la conexión
- 30. Obtención de una conexión JDBC de EclipseLink
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
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