2011-01-09 63 views

回答

10

Class.forName("xxx")不創建到數據庫的連接,它只是加載JDBC驅動程序並註冊它,以便後續的DriverManager.getConnection(...)調用將工作。沒有必要自己實例化驅動程序。

+0

謝謝!最後一個qn-如果你實例化它,那麼後續的DriverManager.getConnection(..)將不會再次實例化它,對嗎?只有當你沒有在第一步中實例化它時,它纔會這樣做? – OckhamsRazor 2011-01-09 16:37:47

1

使用支持jdbc 4.0的驅動程序,您甚至不需要Class.forName()。 當DriverManager查找驅動程序時,該驅動程序應該具有內置機制以便自動加載, 。

(ref:http://download.oracle.com/javase/6/docs/api/java/sql/DriverManager.html) DriverManager方法getConnection和getDrivers已得到增強以支持Java Standard Edition Service Provider機制。 JDBC 4.0驅動程序必須包含文件META-INF/services/java.sql.Driver。該文件包含java.sql.Driver的JDBC驅動程序實現的名稱。例如,加載my.sql.Driver類中,META-INF /服務/ java.sql.Driver文件需要包含下面的條目:

my.sql.Driver

應用程序不再需要顯式地使用Class.forName()加載JDBC驅動程序。當前使用Class.forName()加載JDBC驅動程序的程序將繼續工作而不進行修改。