2017-08-14 1 views
0

J'ai un très simple Java obtenir l'application commencé à utiliser le H2 en mémoire DB:Pourquoi pilote JDBC pas nécessaire pour H2

String DB_URL = "jdbc:h2:./test"; 
try(Connection conn = DriverManager.getConnection(DB_URL,USER,PASS); 
       Statement stmnt = conn.createStatement()){ 
    // executing SQLs, getting a result set, etc. 
    ... 
} 
// Catching & handling exceptions 

Les travaux d'application, cependant, je me demande pourquoi ne pas avoir à appelez Class.forName(JDBC_DRIVER); n'importe où dans mon code? Dans tous les démarrages rapides H2, ils chargent la classe manuellement.

Répondre

2

Vous n'avez pas besoin de faire cela pour un pilote JDBC qui n'a pas beaucoup d'années. Les pilotes sont grâce au mécanisme de fournisseur de services de Java, as documented auto-découverte:

Les méthodes de DriverManager getConnection et getDrivers ont été améliorés pour soutenir le mécanisme de fournisseur de services Java Standard Edition. JDBC 4.0 Les pilotes doivent inclure le fichier META-INF/services/java.sql.Driver. Ce fichier contient le nom de l'implémentation des pilotes JDBC de java.sql.Driver. Par exemple, pour charger la classe my.sql.Driver, le META-INF/services/fichier java.sql.Driver contiendrait l'entrée:

my.sql.Driver 

applications ne doivent plus charger les pilotes JDBC explictly à l'aide de la classe. forName(). Les programmes existants qui chargent actuellement les pilotes JDBC à l'aide de Class.forName() continueront à fonctionner sans modification.

Notez que, contrairement à ce que dit le titre de votre question, le pilote JDBC est nécessaire. Utiliser Class.forName() pour le charger est ce qui est inutile.

+0

Ah, ça a beaucoup de sens, merci. Et oui, je pensais que le pilote était chargé automatiquement quelque part, mais ne pouvait pas le trouver sur les sites H2; mon titre est mal rédigé. – pydoge