在JDBC中,当您需要连接时,必须首先加载类Driver。您可以通过调用Class.forName
。
Class.forName("org.postgresql.Driver");
此类方法加载一个类并将其添加到DriverManager holder:
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException e) {
e.printStackTrace();
}
}
然后要获得连接,您必须调用静态方法getConnection
。
Connection connection = DriverManager.getConnection(DbUrl, Username, Password);
getConnection
方法使用单独的线程创建连接,依此类推......
我的问题是为什么JDK的作者使用静态方法:Class.forName
,getConnection
。 “静态”方法的作用是什么?
答案 0 :(得分:2)
以前,您需要使用Class.forName()
显式加载类,因为驱动程序包含将在类加载时运行的初始化代码(新驱动程序不再需要它)。
DriverManager
将注册可用的Drivers
,之后您可以使用静态getConnection()
方法使用任何已注册的驱动程序打开连接。选择的驱动程序将取决于所使用的jdbc URL,然后静态工厂方法将返回一个" native"实现Connection
接口的连接对象。
正如您可以轻易看到的那样,任何非静态操作都没有优势,但在获得Connection
之后,您不再使用静态方法。
因此Class.forName()
是静态的,并且DriverManager.getConnection()
是静态的,因为它是不同JDBC驱动程序Connection
实现的工厂方法。