gpt4 book ai didi

java - 为什么通过jdbc连接mysql时不能静态加载sql Driver类?

转载 作者:行者123 更新时间:2023-12-01 22:42:38 25 4
gpt4 key购买 nike

我知道为了将java代码连接到mysql,我们必须通过我们拥有的以下选项之一加载com.mysql.jdbc.Driver(我不确定所有这些选项):-

Class.forName("com.mysql.jdbc.Driver");
OR
Class.forName("com.mysql.jdbc.Driver").newInstance();
OR
System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver");
OR
//through command prompt
java -Djdbc.drivers=com.mysql.jdbc.Driver ProgramName
Or
DriverManager.registerDriver("com.mysql.jdbc.Driver");

我的问题:-

第一个问题-我想确认上述所有方法加载驱动程序类是否合法。

第二个问题:-我们拥有的第二种方法,即

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

与使用new关键字创建对象相同。例如。

new com.mysql.jdbc.Driver();

我已经尝试过这个并且有效。那么,为什么我们不能使用第二种方法呢?使用它有什么缺点吗?

我想我已经把我的两个问题都说清楚了,如果没有,请评论,我会编辑它。

最佳答案

截至JDBC 4.0Service Provider API在 Java 中,作为开发人员,您不应该再加载驱动程序。任何支持 JDBC 4 的驱动程序都应提供一个包含要加载的实际驱动程序类的文件。 java.sql.DriverManager 将使用服务提供者加载类路径中所有可用的Driver 类。

因此,尽管您展示的所有方法都是有效的,但您不应该再使用它们。我认为仍然使用这种加载驱动程序的方式的教程已经过时了。甚至 H2 和 Derby 也提供了这种机制(至少 MySQL、Oracle 和 Microsoft 也支持这一点)。因此,在使用 DriverManager 时,您应该在代码中执行的唯一操作是

DriverManager.getConnection("jdbc:mysql://localhost/yourdb");

要回答你的第二个问题,Class.forName("com.mysql.jdbc.Driver").newInstance();new com.mysql.jdbc.Driver( ); 当您进入静态链接和类加载时会有点困难。最后,您会得到与 com.mysql.jdbc.Driver 实例相同的结果。

但是,new com.mysql.jdbc.Driver(); 将导致该类的静态链接,因为它将成为类导入语句的一部分。因此,一旦加载此类并且 com.mysql.jdbc.Driver 类不可用,它就会崩溃。

Class.forName("com.mysql.jdbc.Driver").newInstance();将在运行时尝试加载该类。它也会因 classnotfound 而失败,但您可以捕获它并尝试加载另一个驱动程序或向用户显示一条友好的消息。

但正如前面提到的,您不应该执行其中任何一个操作并让 JDBC 驱动程序自动加载。

关于java - 为什么通过jdbc连接mysql时不能静态加载sql Driver类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25905368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com