Mi chiedevo perché entrambi gli apparecchi Class.forName("com.mysql.jdbc.Driver");
e Class.forName("com.mysql.jdbc.Driver").newInstance();
funzionino quando li utilizzo per connettersi a un database. Di diritto, non è il primo che non dovrebbe funzionare, poiché non è stata creata alcuna nuova istanza. Eppure, funziona ancora. Sto usando netbeans 6.9.1. Grazie per il tuo contributo!Connessione JDBC - Class.forName vs Class.forName(). NewInstance?
risposta
Class.forName("xxx")
non crea una connessione al database, carica semplicemente il driver JDBC e lo registra in modo che una successiva chiamata DriverManager.getConnection(...)
funzioni. L'istanziazione del driver non è necessaria.
Con un driver che supporta jdbc 4.0 non è nemmeno necessario Class.forName(). Il driver dovrebbe avere un meccanismo incorporato per caricarsi al volo, quando DriverManager lo cerca.
(ref: http://download.oracle.com/javase/6/docs/api/java/sql/DriverManager.html) I metodi DriverManager getConnection e getDrivers sono stati migliorati per supportare il meccanismo Provider Java Standard Edition Service. I driver di JDBC 4.0 devono includere il file META-INF/services/java.sql.Driver. Questo file contiene il nome dell'implementazione dei driver JDBC di java.sql.Driver. Per esempio, per caricare la classe my.sql.Driver, il file META-INF/services/java.sql.Driver dovrebbe contenere la voce:
my.sql.Driver
applicazioni non hanno bisogno di più tempo per esplicitamente caricare i driver JDBC utilizzando Class.forName(). I programmi esistenti che attualmente caricano i driver JDBC utilizzando Class.forName() continueranno a funzionare senza modifiche.
- 1. cosa fa esattamente questo Class.forName ("com.mysql.jdbc.Driver"). NewInstance();
- 2. Class.forName sembra ancora necessario
- 3. È necessario il meccanismo Class.forName()?
- 4. Come funziona Class.forName()?
- 5. Istanziare l'oggetto singleton utilizzando Class.forName()?
- 6. Generics e Class.forName
- 7. È possibile rendere Class.forName ("") flessibile?
- 8. Java Class.forName() dalla directory remota
- 9. Class.forName (JDBC_DRIVER) non è più necessario?
- 10. Java: Differenza tra Class.forName e ClassLoader.loadClass
- 11. Differenza tra MyClass.class e Class.forName ("className")
- 12. newInstance() vs new
- 13. In Java, connettendosi a mysql, qual è il significato di Class.forName?
- 14. Connessione JDBC Postgres in Eclipse Help
- 15. Qual è la stringa di connessione del driver JDBC MySQL?
- 16. Java - problemi di connessione al database MySQL online utilizzando JDBC
- 17. Creazione di un frammento: costruttore vs newInstance()
- 18. Errore di connessione JDBC: fuso orario non riconosciuto
- 19. Connessione JDBC sospesa
- 20. JDBC- postgres, connessione rifiutata
- 21. L'utilizzo di class.forname più volte causerà una perdita di memoria? (running inside tomcat)
- 22. Differenza tra Spring JDBC Vs Plain JDBC?
- 23. JDBC Transaction vs Connection Chiarimento
- 24. Python 3 - Connessione con JDBC
- 25. Connessione JDBC utilizzando file diversi
- 26. Scala Best Practices: Trait Inheritance vs Enumeration
- 27. Impossibile connettersi a MySQL con JDBC - Timeout connessione - Ubuntu 9.04
- 28. Caricamento driver JDBC
- 29. Pool di connessione Tomcat JDBC (connessione in uscita)
- 30. io.on ('connessione', ...) vs io.sockets.on ('connessione', ...)
grazie! un ultimo qn- se lo istanziate, quindi il successivo DriverManager.getConnection (..) non lo riattribuirà di nuovo, corretto? Lo farà solo se non lo hai istanziato nel primo passaggio? – OckhamsRazor
Sospetto che solo caricando la classe, il gestore driver lo abbia già istanziato, attivato da un blocco statico nel driver. Ad essere onesti, non ne sono del tutto sicuro. Se si desidera utilizzare il driver che è stato istanziato (ad esempio per avvolgerlo), è necessario evitare di utilizzare DriverManager per ottenere connessioni o registrare la propria istanza del driver utilizzando i metodi statici di DriverManager. – araqnid