我发现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....");
答案 0 :(得分:4)
它获取给定FQN表示的Class
对象。如果之前未加载,它也会加载该类。这有初始化静态类变量和运行任何静态块的副作用。
使用最新的JDBC版本,您不再需要Class.forName()
来加载驱动程序,而是使用较旧的驱动程序版本。
答案 1 :(得分:2)
在最新的运行时,除了一件事情之外,它是毫无意义的:如果运行时类路径中缺少(正确的)驱动程序jar,这行代码将告诉您确切的。< / p>
如果删除了这行代码,当代码尝试创建连接时,您将遇到一般失败;一个故障有几个来源,包括另一个非常常见的错误,即使用错误的JDBC连接URL。它试图解决问题,使水变得混乱。
答案 2 :(得分:1)
问题是: 我怎么知道每个人都在使用jdbc 4.0,而你却不知道。 您可以为在旧设备或过时设备上测试的人员添加此功能。