mysql的驱动是在什么时候注册到DriverMannager中的?

我们知道在获取数据库连接对象的时候加载驱动,然后通过DriveMannage获取连接,那么驱动管理器是是如何获取到该驱动的呢?

//通过反射将Driver加载到内存中
Class.forName("com.mysql.cj.jdbc.Driver");
//提供相关信息
String user="root";
String password="xxx";
String url="jdbc:mysql://localhost:3306/test04_emp";

//通过getConnection()获取连接
Connection connect=DriverManager.getConnection(url, user, password);

查看Driver的源码如下:
分析:有一个static代码块-里面调用DriverMannage的静态方法将该
然后想:静态代码块的执行时机是什么呢?

类加载的初始化阶段,会将静态代码块和已经分配过空间的静态变量的赋值,一块生成一个方法去执行;
因此,该驱动在执行Class.forName 通过全类名加载进来的时候,已经找到DriverMannage注册了自己!

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    public Driver() throws SQLException {
    }

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

补充:通过类加载器读取配置文件中的信息

Properties pros = new Properties();
		
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("Druid.properties");
		
pros.load(is);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值