JDBC中静态方法的利润是多少?

时间:2015-11-02 12:48:26

标签: java

在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.forNamegetConnection。 “静态”方法的作用是什么?

1 个答案:

答案 0 :(得分:2)

以前,您需要使用Class.forName()显式加载类,因为驱动程序包含将在类加载时运行的初始化代码(新驱动程序不再需要它)。

DriverManager将注册可用的Drivers,之后您可以使用静态getConnection()方法使用任何已注册的驱动程序打开连接。选择的驱动程序将取决于所使用的jdbc URL,然后静态工厂方法将返回一个" native"实现Connection接口的连接对象。

正如您可以轻易看到的那样,任何非静态操作都没有优势,但在获得Connection之后,您不再使用静态方法。

因此Class.forName()是静态的,并且DriverManager.getConnection()是静态的,因为它是不同JDBC驱动程序Connection实现的工厂方法。