JDBC驅(qū)動(dòng)程序
JDBC通過(guò)一系列接口來(lái)訪問(wèn)數(shù)據(jù)庫(kù),而這些接口的實(shí)現(xiàn)則是由不同的數(shù)據(jù)庫(kù)廠商或組織實(shí)現(xiàn)的。要實(shí)現(xiàn)對(duì)某一特定類型數(shù)據(jù)庫(kù)的訪問(wèn)就要通過(guò)注冊(cè)JDBC驅(qū)動(dòng)程序來(lái)讓程序知道去哪里調(diào)用JDBC API 接口的實(shí)現(xiàn)。
先看下面的一段程序:





java.sql.DriverManager:從名字就可以看出是用于驅(qū)動(dòng)程序管理的,它的主要責(zé)任是保留一個(gè)驅(qū)動(dòng)程序的列表,并通過(guò)getConnection方法來(lái)給應(yīng)用程序提供與所請(qǐng)求的URL相匹配的Driver(可能是由于同一個(gè)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序可能是有幾種不同的實(shí)現(xiàn)方式,但如果DriverManager中對(duì)一個(gè)URL有多個(gè)匹配的Driver,它是不是只選擇第一個(gè)找到的呢?),并返回Connection對(duì)象,如果找不到就會(huì)拋出一個(gè)異常,也就是這一句 Connection oConn = DriverManager.getConnection(url,userName,password)。同時(shí)還提供了registerDriver()和deregisterDriver(),這兩個(gè)方法允許驅(qū)動(dòng)程序的工具用DriverManager注冊(cè)驅(qū)動(dòng)程序或從列表中刪除。可以感覺(jué)出是在用Class.froName("com.mysql.jdbc.Driver").newInstance();加載類并初始化這個(gè)類的靜態(tài)初始化部分時(shí)調(diào)用registerDriver()的方法注冊(cè)的,我在mysql驅(qū)動(dòng)程序的源碼的Driver類中找到對(duì)這個(gè)方法的調(diào)用。








































