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.    }  

转载于:https://www.cnblogs.com/dengjiali/articles/3198471.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值