Class.forName()方法对JDBC有什么作用?

时间:2017-02-09 08:35:02

标签: java jdbc

我发现Class.forName方法初始化静态块。

Class.forName("com.mysql.jdbc.Driver").newInstance();

在jdbc 4.0之后,您不需要调用此方法。但是人们总是在jdbc 4.0版本之后使用这种方法。我的问题是,如果我使用jdbc 4.0,为什么需要使用此方法? Class.forName()方法对JDBC 4.0以及之后做了什么?

这是我的示例代码。我只将mysql-connector.jar添加到我的库中,当我运行此代码时它运行正常。

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306","root","root");
Statement stmt = con.createStatement();
System.out.println("Created DB Connection....");

3 个答案:

答案 0 :(得分:4)

它获取给定FQN表示的Class对象。如果之前未加载,它也会加载该类。这有初始化静态类变量和运行任何静态块的副作用。

使用最新的JDBC版本,您不再需要Class.forName()来加载驱动程序,而是使用较旧的驱动程序版本。

答案 1 :(得分:2)

在最新的运行时,除了一件事情之外,它是毫无意义的:如果运行时类路径中缺少(正确的)驱动程序jar,这行代码将告诉您确切的。< / p>

如果删除了这行代码,当代码尝试创建连接时,您将遇到一般失败;一个故障有几个来源,包括另一个非常常见的错误,即使用错误的JDBC连接URL。它试图解决问题,使水变得混乱。

答案 2 :(得分:1)

问题是: 我怎么知道每个人都在使用jdbc 4.0,而你却不知道。 您可以为在旧设备或过时设备上测试的人员添加此功能。