2009-04-01 14 views
7

Ci sono due modi per caricare un driver:Quale approccio è meglio caricare un driver JDBC?

  1. Class.forName()

  2. DriverManager.registerDriver()

Metodo 1 chiama internamente anche DriverManager.registerDriver e metodo 1 è il modo preferito.

Ma perché? C'è qualche piccola differenza o è meglio le prestazioni, ecc.?
Eventuali viste sono apprezzati ..

risposta

3

Se si utilizza Class.forName(), non è necessario disporre di alcuna dipendenza in fase di compilazione su un determinato driver JDBC. Ciò è particolarmente utile quando si scrive codice che può funzionare con una varietà di database.

Si consideri il seguente codice:

// Register the PostgreSQL driver 
Class.forName("org.postgresql.Driver"); 

Ora confrontarlo:

import org.postgresql.Driver; 

// Register the PostgreSQL driver 
DriverManager.registerDriver(new Driver()); 

e ritengono che nel primo esempio, il nome della classe potrebbe anche sono venuti da un file delle proprietà, file XML , ecc., a seconda di ciò che è conveniente per la tua applicazione.

1

Leggendo il JavaDoc sembra Class.forName è stato richiesto per cominciare, e poi le cose sono cambiate in modo che non era più il modo preferito (o modo richiesto).

+0

Um ... Non penso che il collegamento sia corretto. –

+0

risolto, grazie (stavo leggendo su quello che stava dicendo e immagino di aver dimenticato di ri-afferrare il collegamento :-) – TofuBeer

1

Devo dire che la tua vita sarà molto più semplice se costruisci un'istanza di driver facendo riferimento statico al driver. Una volta che hai questo, puoi ignorare lo DriverManager che è fatto del male.

2

Il JDBC API Tutorial and Reference è il miglior riferimento per tali domande, uno section of which addresses the role played by the Driver and DriverManager classes.

Tutte le classi di driver devono disporre di un inizializzatore statico responsabile della creazione di un'istanza di tale driver e della relativa registrazione con DriverManager, quando viene caricata la classe Driver.

Inoltre, DriverManager.getConnection() è probabilmente l'unico metodo user-space della classe. La maggior parte degli altri metodi di solito non viene utilizzata dalla maggior parte degli sviluppatori che utilizzano l'API JDBC. Quindi il vecchio adagio è ancora valido: usa Class.forName() per caricare il driver, quindi usa DriverManager.getConnection() per ottenere una connessione al database.

1

"le prestazioni sono migliori, ecc.?"

Direi che le prestazioni per questa singola operazione sono l'ultima delle tue preoccupazioni.

Se si sta utilizzando un app server Java EE, la risposta è "nessuno". Dovresti impostare un pool di connessioni e lasciarlo gestire il caricamento del driver e la consegna delle connessioni.

+0

sono d'accordo con il tuo punto. – harshit

Problemi correlati