首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

JDBC驱动加载历程

2012-10-25 
JDBC驱动加载过程以一段mysql jdbc加载的demo为例:return Class.forName(str, true, this.loader).newInst

JDBC驱动加载过程
以一段mysql jdbc加载的demo为例:

return Class.forName(str, true, this.loader).newInstance();并生产实例,看sun.jdbc.odbc.JdbcOdbcDriver源码,它也是JdbcOdbcDriver localJdbcOdbcDriver = new JdbcOdbcDriver();然后DriverManager.registerDriver(localJdbcOdbcDriver);向驱动管理器注册了驱动,与Mysqljdbc一个道理,注册驱动代码中,会实例化DriverInfo,这是对驱动信息的封装,然后会向driver vetor中加入DriverInfo对象,初始化完成之后,从vetor中拿出DriverInfo,然后取出driver,调用connect方法,这个方法会解析url,如果符合当前驱动的规则,那么就用当前驱动,比如如果传入的是jdbc:mysql://localhost:3306/jdbcana就可以解析出来是用mysql jdbc 驱动。而Mysql jdbc驱动又是什么时候加载的呢,因为我们将mysql jar包加入了classpath环境下,所以systemclassloader会加载其环境下的jar包,而在Driver类中有一段static语句块:
try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can't register driver!");}}
static {
,在这里,也向DriverManager注册了driver。

总的来说,所有数据库厂商提供的驱动都是要向DriverManger中registerDriver,这样才能在以后根据URL来判定调用哪个驱动器。而initialize-> loadInitialDrivers方法只是加载系统提供的驱动器,或者加载设置了jdbc.dirvers这个system.property的驱动,其他驱动的注册都是依赖于classloader的加载机制,通过static语句块来实现类的加载

热点排行