JDBC驱动类的加载过程

我们在刚开始学会使用JDBC操作数据库时常常使用如下代码新建一个数据库连接:


Class.forName("com.mysql.jdbc.Driver");
Connection conn 
    = DriverManager.getConnection("jdbc:mysql://127.0.0.1/test?useServerPrepStmts=true&cachePrepStmts=true", "root", "root");        

那么为什么以上代码能够是给定的驱动类,注册到了DriverManager当中呢?

首先,Class.forName("com.mysql.jdbc.Driver");会将com.mysql.jdbc.Driver类加载到JVM中,而Driver类的源代码中包含一个静态代码块,会在类加载时调用:

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

通过Class.forName()的方式加载Driver类,Driver类中的静态代码块在类加载时,将自身的一个新建实例注册绑定到DriverManager上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容