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!");
        }
    }
}


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