すべての JDBC 4 準拠のドライバーには、その jar に というファイルがあり、そのMETA-INF/services/java.sql.Driver
ファイルには の実装がリストされますjava.sql.Driver
。接続を要求すると、DriverManager
は を使用してクラスパス内の のServiceLoader
すべての (!) コピーを検索し、リストされているすべてのクラスをロードします。クラスがロードされると、それ自体を に登録する必要があるMETA-INF/services/java.sql.Driver
ため、はサービス ローダーを使用してすべてのクラスをロードし、各実装はそれ自体を登録します。java.sql.Driver
DriverManager
DriverManager
Driver
からの接続を要求すると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
.