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. Instantiate anidado clase estática usando Class.forName
- 5. Diferencia entre MyClass.class y Class.forName ("className")
- 6. ¿Es posible hacer que Class.forName ("") sea flexible?
- 7. Java: Diferencia entre Class.forName y ClassLoader.loadClass
- 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. JDBC- postgres, conexión rechazada
- 14. Conexión JDBC segura
- 15. Python - Conexión a JDBC
- 16. Conexión JDBC colgando
- 17. ¿Cuál es la cadena de conexión del controlador JDBC de MySQL?
- 18. Diferencia entre Spring JDBC Vs Plain JDBC?
- 19. Conexión JDBC con reconexión automática
- 20. Python 3 - Conexión con JDBC
- 21. Conexión JDBC usando diferentes archivos
- 22. Buenas prácticas: JDBC de conexión
- 23. ORM Technologies vs JDBC?
- 24. Cómo utilizar un controlador JDBC desde una ubicación arbitraria
- 25. Conexión a SQL Server LocalDB utilizando JDBC
- 26. MS SQL Server y JDBC: cerrado conexión
- 27. Java JDBC estado de la conexión
- 28. Almacenar una conexión JDBC en HttpSession
- 29. Una conexión persistente con JDBC a MySQL
- 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