すべての JDBC 4 準拠のドライバーには、その jar に というファイルがあり、そのMETA-INF/services/java.sql.Driverファイルには の実装がリストされますjava.sql.Driver。接続を要求すると、DriverManagerは を使用してクラスパス内の のServiceLoaderすべての (!) コピーを検索し、リストされているすべてのクラスをロードします。クラスがロードされると、それ自体を に登録する必要があるMETA-INF/services/java.sql.Driverため、はサービス ローダーを使用してすべてのクラスをロードし、各実装はそれ自体を登録します。java.sql.DriverDriverManagerDriverManagerDriver
からの接続を要求するとDriverManager、 はDriverManager登録済みのすべてのドライバに対して反復処理を行い、Connection. "jdbc:firebirdsql:"ドライバーは、JDBC URL を使用して、それがサポートするプロトコルであるかどうかを確認します (たとえば、Jaybird/Firebird JDBC は、URL がまたはで始まるかどうかを確認します"jdbc:firebird:")。ドライバーがプロトコルをサポートしていない場合は を返します。プロトコルをnullサポートしている場合は、確立された接続を返すか、または をスローしSQLExceptionます (たとえば、URL でエラーが発生した場合、または接続できなかった場合)。 . すべてのドライバーが返された場合null(プロトコルをサポートするドライバーがない場合)、with エラーDriverManagerがスローされます。SQLException"No suitable driver found for <url>"
そのため、クラスパスに複数のドライバーがあっても、それらが異なるプロトコルをサポートしている限り問題ありませんが、同じデータベース (または少なくとも同じプロトコルプレフィックス) に複数のドライバーがある場合は、ドライバーのリストの最初のものを使用します。Java のバージョンによっては、そのドライバーがSQLException.