星空网 > 软件开发 > 数据库

关于JDBC中Class.forName的疑惑

  一直以来都不知道为什么执行了 Class.forName(); 之后,通过DriverManager.getConnection(); 就可以获取相关数据库的连接Connection的实现呢?今天看了一下学习的视频,顺便看了一下代码,终于明白的原理。

  首先,得说说Class.forName(); 的作用:要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段。

 

  而在com.mysql.jdbc.Driver类中,有以下代码:

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

这是JDBC规范中要求每个数据库厂家的实现类Driver都必须向DriverManager注册自己,才可以用DriverManager获取Connection对象。

这样就名正言顺了,在register方法中,会把自身加入到DriverManager中,

DriverInfo di = new DriverInfo();

di.driver = driver;
di.driverClass = driver.getClass();
di.driverClassName = di.driverClass.getName();

writeDrivers.addElement(di);

 

getConnection中会获取Connection对象

Connection result = di.driver.connect(url, info);

 




原标题:关于JDBC中Class.forName的疑惑

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

IQC:https://www.ikjzd.com/w/1573201286422503425
齐论跨境电商:https://www.ikjzd.com/w/1573201286972301313
IRAM认证:https://www.ikjzd.com/w/1573201299131244546
IRCE:https://www.ikjzd.com/w/1573201299567452161
红鲸科技:https://www.ikjzd.com/w/1573201300192403458
爱尔兰电商:https://www.ikjzd.com/w/1573201300670554113
回乡创业,不知道干什么,能否推荐几个农村老家创业的好项目?:https://www.vstour.cn/a/365177.html
恐怖游轮2002 恐怖游轮2022:https://www.vstour.cn/a/365178.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流