是否需要 Class.forName() 机制?

Is Class.forName() mechanism needed?

以下代码:

Class.forName(dbDriver); // "org.postgres.Driver" or "com.mysql.jdbc.Driver"

是/必须打开 JDBC 连接。

我听说现代 JDBC 驱动程序不再需要它。但是我无法在我的项目中删除它,因为我遇到了 No suitable driver found 异常。我正在使用 postgresql-9.1-901.jdbc3.jar、Java7 和 tomcat7。

什么时候可以省略Class.forName(...)构造?

Class.forName() 不需要,因为 JDBC 4.0.

此处摘自 Java Tutorials on JDBC

In previous versions of JDBC, to obtain a connection, you first had to initialize your JDBC driver by calling the method Class.forName. This methods required an object of type java.sql.Driver. Each JDBC driver contains one or more classes that implements the interface java.sql.Driver. The drivers for Java DB are org.apache.derby.jdbc.EmbeddedDriver and org.apache.derby.jdbc.ClientDriver, and the one for MySQL Connector/J is com.mysql.jdbc.Driver. See the documentation of your DBMS driver to obtain the name of the class that implements the interface java.sql.Driver.

Any JDBC 4.0 drivers that are found in your class path are automatically loaded. (However, you must manually load any drivers prior to JDBC 4.0 with the method Class.forName.)