jdbc中Class.forName(driverName)的作用


上次面試別人問我jdbc的過程:

我是這樣回答的:

  Class.forName加載驅動

  DriverManager.connect(url,username, password)獲取連接對象

  conn獲取statement或者prepareStatement對象進行sql操作

  關閉連接

后面在Class.forName這里把我問死了。

他問Class.forName是如何加載驅動的呢?Class.forName方法的作用是什么呢?我回答是得到Class對象。問那怎么裝載的驅動對象呢?我產生懷疑了,我說可能得到的是Object對象。他說是嗎?我說可能,但是還是覺得Class.forName是獲取Class對象。然后就問我如何獲取一個對象,我說new 、反射的newInstance方法、(還有反序列化、clone)。如何得到Class對象呢?我回答的是obj.getClass()方法、類名.class. Class.forName.

 

就是Class.forName這里如何加載了驅動把我搞死了。弄得我迷糊將Class.forName是否得到Class對象混亂了。忽略了Class.forName有一個裝載類對象的作用。裝載就包括了初始化的操作。

Driven中的代碼:

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

JDBC規范要求Driver類在使用前必須向DriverManger注冊自己。注冊過程在Driver類的靜態類已經實現。也就是說只要類被加載,就完成了向驅動管理器的注冊。

 

參考鏈接:https://blog.csdn.net/huscker/article/details/53080489


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM