Class.forName("org.gjt.mm.mysql.Driver");注册驱动

学校时,照抄老师的代码。工作时,直接调用成熟框架的方法。从没有真正自己研究下。(惭愧)
今天试着自己写写JDBC连接数据库。
看到代码
……
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection(url,username,password);
……
我在想孤零零的一句【Class.forName("org.gjt.mm.mysql.Driver");】到底做了什么,网友说:注册MySql驱动。可是自己习惯思维是,看到调用。这连引用都没有。它加载了谁,又调用了谁呢?
想不出来!“何不看看驱动源码”呢?对啊!理解解压【org.gjt.mm.mysql.Driver】
org\gjt\mm\mysql文件夹下就一个文件:类Driver

Java代码 复制代码 收藏代码
  1. package org.gjt.mm.mysql;   
  2.   
  3. import java.sql.SQLException;   
  4.   
  5. public class Driver extends com.mysql.jdbc.Driver   
  6. {   
  7. }  
package org.gjt.mm.mysql;

import java.sql.SQLException;

public class Driver extends com.mysql.jdbc.Driver
{
}


再去看看 com.mysql.jdbc.Driver

Java代码 复制代码 收藏代码
  1. package com.mysql.jdbc;   
  2.   
  3. import java.sql.DriverManager;   
  4. import java.sql.SQLException;   
  5.   
  6. public class Driver extends NonRegisteringDriver   
  7.   implements java.sql.Driver   
  8. {   
  9.   static  
  10.   {   
  11.     try  
  12.     {   
  13.       DriverManager.registerDriver(new Driver());   
  14.     } catch (SQLException E) {   
  15.       throw new RuntimeException("Can't register driver!");   
  16.     }   
  17.   }   
  18. }  
package com.mysql.jdbc;

import java.sql.DriverManager;
import java.sql.SQLException;

public class Driver extends NonRegisteringDriver
  implements java.sql.Driver
{
  static
  {
    try
    {
      DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
      throw new RuntimeException("Can't register driver!");
    }
  }
}


兜兜转转,最后调用的还是【DriverManager.registerDriver(new Driver());】
但源文件里的

Java代码 复制代码 收藏代码
  1.    public static synchronized void registerDriver(java.sql.Driver driver)   
  2. throws SQLException {   
  3. if (!initialized) {   
  4.     initialize();   
  5. }   
  6.         
  7. DriverInfo di = new DriverInfo();   
  8.   
  9. di.driver = driver;   
  10. di.driverClass = driver.getClass();   
  11. di.driverClassName = di.driverClass.getName();   
  12.   
  13. // Not Required -- drivers.addElement(di);   
  14.   
  15. writeDrivers.addElement(di);    
  16. println("registerDriver: " + di);   
  17.   
  18. /* update the read copy of drivers vector */  
  19. readDrivers = (java.util.Vector) writeDrivers.clone();   
  20.   
  21.    }  
posted @ 2013-07-18 16:24  ajiaju  阅读(710)  评论(0编辑  收藏  举报