JDBC-注册数据库驱动

偶尔会突然短路,想着为什么Class.forName(${DriverName}); DriverManager里就有注册了这个数据库的驱动呢?


    这是因为,我们在思考 注册数据库驱动 的时候,总是想着我们自己去注册,如果没有显式的去做,就不自在。 这还是因为没有一个OO的思想。


    其实呢,注册数据库驱动这个动作,sun只提供了注册的动作,其余的是谁注册它并不关心,这样呢,它就是一个服务提供者,我提供注册的服务给你,你自己去注册就好了。


    就像加油站,我给加油站以及加油的龙头在那,你没油了你自己去拿着龙头加油。我不需要知道你这是桑塔纳还是水泥车还是宝马。


    sun提供给你这个接口,你们数据库提供商就自己拿去注册。


    下面是代码:


     sun提供的数据库驱动管理类:

   

public static synchronized void registerDriver(Driver driver)
        throws SQLException
    {
        registerDriver(driver, null);
    }


    mysql提供的驱动类:(Class.forName()是让JVM去查找指定的类(初始化),并没有实例化,只不过是把类加载到了JVM中。但是由于静态代码和class是在方法区中的,在初始化的时候就会全部执行一次且以后不再执行,所以当初始化时,会加载以下代码中的static片段,即→注册数据库驱动方法)


public class Driver extends NonRegisteringDriver
    implements java.sql.Driver
{

    public Driver()
        throws SQLException
    {
    }

    static 
    {
        try
        {//mysql的驱动自己拿着sun的驱动管理类进行了注册。我们在使用的时候只要把这个类初始化就行了。
            DriverManager.registerDriver(new Driver());
        }
        catch(SQLException E)
        {
            throw new RuntimeException("Can't register driver!");
        }
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章