Citando dal JDBC Specification, capitolo 9, sezione 2:
driver JDBC devono implementare l'interfaccia del driver, e l'implementazione devono contenere un inizializzatore statico che verrà chiamato quando il driver viene caricato. Questo inizializzatore registra una nuova istanza con il DriverManager.
e il codice di esempio è previsto AcmeJdbcDriver come segue:
public class AcmeJdbcDriver implements java.sql.Driver {
static {
java.sql.DriverManager.registerDriver(newAcmeJdbcDriver());
}
}
E quando si chiama Class.forName(String className), secondo la documentazione API, avviene quanto segue:
Una chiamata forName ("X") provoca l'inizializzazione della classe chiamata X.
dove inizializzazione implica il codice nel blocco statico da eseguire.
Quindi, in pratica, si inizializza la classe Driver e, a sua volta, la classe si registra con java.sql.DriverManager secondo le specifiche JDBC.
Si prega di notare, questo non è più necessario. Dettagli possono essere trovati here.
La metodi DriverManager getConnection e getDrivers sono stati migliorato per supportare il provider meccanismo di Java Standard Edition Service. I driver 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 classe my.sql.Driver, META-INF/services/file java.sql.Driver conterrebbe la voce:
my.sql.Driver
applicazioni non è più necessario per caricare esplicitamente driver JDBC utilizzando Class.forName().
fonte
2017-05-21 06:08:31
grazie per le tue buone spiegazioni –
Nessun problema, la roba di classe/classe può essere un po 'difficile per avvolgere la testa. :) – chossenger