在Java中想要進行數據庫操作,最重要的兩個步驟就是加載數據驅動,然後取得數據庫連接。
1.加載 數據庫驅動( Class.forName(String className) ):
因為Java是一種純面向對象的編程語言,所以一切事物都可以看作是類或者類對象,數據庫也是,Java正是通過JDBC將數據庫抽象成為對象,然後對該對象進行操作。不同的是,數據庫是本身存在的,不需要Java進行創建,我們要做的只是將一個正常運行的數據庫實例在我們的Java程序中進行訪問。
然而任何類在Java中正常運行都需要一個驅動器,一般的類的驅動器就是JVM本身,數據庫程序是不依賴虛擬機驅動的程序,所以必須自己實現驅動器,這時候就用到了Class.forName(String className),這個方法就是用來手寫驅動器的。這時又會有一個問題,類名是什麼?
外部程序要被Java訪問首先一點,該外部程序要有被Java調用的接口,並且有符合Java命名規則的類名。Java接口就是被JVM控制程序行為的Java驅動器,也就是JDBC。該接口是由數據庫廠商提供的,所以類名也是由數據庫廠商提供,像MySQL的命名為:com.sql.jdbc.Driver。
forName的加載原理:
a.當程序運行之後,該接口的類名以及以及句柄會記錄到該程序的進程信息中;
b.forName傳入該類名之後會到操作系統中找到具有該類名的線程,找到對應的線程就會找到該線程對應的驅動器,然後就將該驅動器加載到JVM中;
c.之後就可以在Java程序中通過類名調用該進程的功能。
當然,如果是用Eclipse的話,要先把JDBC驅動加載到運行環境中。
2.取得數據庫連接( DriverManager.getConnection(URL, USERNAME, PASSWORD) ):
forName加載完成後會發現這是個數據庫類的驅動,之後會進行一些特殊操作。JDBC是用DriverManager類管理數據庫驅動,而且DriverManager只用來管理JDBC驅動。加載完成的數據驅動會抽象成Java類型保存在DriverManager的靜態變量driver中。JDBC規定,一個Java進程只能有一個JDBC驅動,而且數據庫訪問與HTTP協議的原理一樣,也是要先建立連接。
之後DriverManager的靜態同步方法getConnection方法利用driver建立與數據庫的連接,該方法的第一個參數URL也必須參照數據庫廠商的規定,MySQL的寫法為:jdbc:mysql://hostname:port/具體數據庫名,第二個和第三個參數是數據庫用戶名密碼。該方法的返回值是一個Connection對象,Java程序通過該對象對數據庫進行操作。