JDBC連線中的Class forName 解惑

2021-05-10 05:39:46 字數 952 閱讀 7445

有過jdbc連線經驗的朋友都知道,連線時首先需要載入資料庫驅動,一般都是用class.forname("***.***.***")來載入的。class描述的是類資訊,forname()是class的靜態方法,用來將字串指定的類動態載入進來,它返回的是乙個class物件,檢視api知道其方法為  

class forname(string classname);

classname是完整的類名,如mysql的驅動名"com.mysql.jdbc.driver"。很奇怪的是,驅動載入進來之後,我們並沒有對它進行操作例項化出乙個物件,因為一般類載入進來之後,都需要呼叫class類的newinstance()靜態方法來建立乙個物件,以便進行各種操作。因此,單單使用class.forname()動態載入類是沒有用的,往往都需要例項化出乙個對像來。

class.forname("")返回的是class

class.forname("").newinstance()返回的是object

為什麼我們在載入驅動包的時候,往往只需要class.forname("")就已經足夠了,而不需要再newinstance()一下呢?很多人覺得很奇怪,這樣載入之後,又沒有例項化出乙個物件,我們怎麼來建立資料庫連線等等呢,我們要根據這個驅動建立與之匹配的連線啊。

剛才提到,class.forname("");的作用是要求jvm查詢並載入指定的類,如果在類中有靜態初始化器的話,jvm必然會執行該類的靜態**段。而在jdbc規範中明確要求這個driver類必須向drivermanager註冊自己,即任何乙個 jdbc driver的driver類的**都必須類似如下:

這裡面有乙個靜態**塊,在jvm載入類的時候,會執行這段**,並向drivermananger註冊自己,這樣drivermanager 就知道這個驅動了。因此,在這裡並不需要再newinstance()一下,這樣做是多餘的,這樣建立的物件可能永遠都不會被用到。 這裡給出乙個實際的driver例子源**,mysql的driver類:

JDBC連線的方式

下面羅列了各種資料庫使用jdbc連線的方式,可以作為乙個手冊使用。1 oracle8 8i 9i資料庫 thin模式 class.forname oracle.jdbc.driver.oracledriver newinstance string url jdbc oracle thin local...

JDBC的連線步驟

1 載入 註冊 資料庫驅動 到jvm 2 建立 獲取 資料庫連線。3 建立 獲取 資料庫操作物件。4 定義操作的sql語句。5 執行資料庫操作。6 獲取並操作結果集。7 關閉物件,資料庫資源 關閉結果集 關閉資料庫操作物件 關閉連線 public class jdbctest catch excep...

springboot中JDBC連線超時問題

最近專案中有乙個問題,電子保卡資訊要寫入資料庫,但寫入失敗,報錯 息是這樣的 大體意思是上次成功接收報文的時間超過了資料庫超時時間的值,為了解決這個問題,應當增加資料庫的超時時間或者是啟用資料庫自動重連機制。所以我們可以用兩種方法 1 從db層解決問題 增大資料庫連線超時時間 2 從應用層解決問題 ...