定义mysql驱动程序的路径,驱动程序类如何位于JDBC4中

One of the great additions in version 4 of JDBC You don't have to explicitly load the

driver by calling Class.forName anymore. When your application attempts to connect the database for the first time, DriverManager automatically loads the driver found in

the application CLASSPATH.

My question is how? What if there are multiple drivers in the classpath?

One thing I can guess is that on parsing the connection URL whether driver needed is of JDBC or ODBC can be figured out but how can one say out of multiple jdbc compliant drivers which one is to be selected for the database I am using? (lets say I am using MySql and I need MySql-Connector driver). Is there any static mapping of such database drivers in JVM?

解决方案

When the method getConnection is called, the DriverManager will

attempt to locate a suitable driver from among the JDBC drivers that

were loaded at initialization and those loaded explicitly using the

same class loader as the current application.

The DriverManager methods getConnection and getDrivers have been

enhanced to support the Java SE Service Provider mechanism (SPM).

According to SPM, a service is defined as a well-known set of

interfaces and abstract classes, and a service provider is a specific

implementation of a service. It also specifies that the service

provider configuration files are stored in the META-INF/services

directory. JDBC 4.0 drivers must include the file

META-INF/services/java.sql.Driver. This file contains the name of the

JDBC driver's implementation of java.sql.Driver. For example, to load

the JDBC driver to connect to a Apache Derby database, the

META-INF/services/java.sql.Driver file would contain the following

entry:

org.apache.derby.jdbc.EmbeddedDriver

Now coming to your question.

My question is how? What if there are multiple drivers in the

classpath?

As a class loader rule, any class found first will be loaded and if it is already loaded then will not be reloaded by the class loader.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值