Chi*_*led 2 java service drivers jdbc
我试图准确地了解Java的服务提供程序机制如何工作以找到适当的JDBC驱动程序.这是我到目前为止:
由于Class.ForName不再用于显式加载JDBC Driver,因此Java会从传递给getConnection方法的数据库url字符串中知道它需要什么类型的驱动程序.例如,连接到oracle数据库的数据库url将是这样的:
public static final String DB_URL = "jdbc:oracle:thin@//localhost:1521/ORCL";
Run Code Online (Sandbox Code Playgroud)
然后,DriverManager将在projects类路径中指定的jar中查找oracle驱动程序的实现.它会在META-INF/Services每个jar的目录中查找驱动程序配置文件(其中将是实际驱动程序类的名称).在Class Loader将加载它找到的第一个比赛而忽略其他.
以上工作准确吗?如果我错过了什么或者出了什么问题,请告诉我.
如果检查源代码,您将看到Java不会尝试从URL检测驱动程序的实现名称(即驱动程序类).相反,如果它们能够处理该URL,它会询问它在类路径中找到的每个驱动程序实现.
行动的顺序似乎如下:
DriverManager类已加载.它执行一个静态块,加载系统属性中指定的所有类jdbc.driversjava.sql.driver它在类路径中找到的所有类.现在,当您要求连接时,它会遍历已注册的驱动程序并调用Driver.connect(String url,Properties info)方法.引用:
尝试与给定的URL建立数据库连接.如果驱动程序意识到连接到给定URL的驱动程序类型错误,则应返回"null".这很常见,因为当要求JDBC驱动程序管理器连接到给定的URL时,它会依次将URL传递给每个加载的驱动程序.
如果驱动程序是连接到给定URL的正确驱动程序但是无法连接到数据库,则应该抛出SQLException.
因此,返回非null连接的第一个驱动程序是将使用的驱动程序.
希望有所帮助
| 归档时间: |
|
| 查看次数: |
811 次 |
| 最近记录: |