zoukankan      html  css  js  c++  java
  • 关于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);

  • 相关阅读:
    tomcat中配置jmx监控
    常用sql
    String、StringBuffer、StringBuilder的不同使用场景
    求交集的几种方法
    使用liunx部署的心得
    几种有助于开发的注释方式。
    SpringDataJPA的几个使用记录
    今年要完成的几件事
    研究kisso跨域登录的心得
    SpringBoot使用的心得记录
  • 原文地址:https://www.cnblogs.com/zhongjianlong/p/4567862.html
Copyright © 2011-2022 走看看