gpt4 book ai didi

java - 'Class.forName("MY_JDBC_DRIVER")' 的用途是什么?

转载 作者:行者123 更新时间:2023-11-28 23:25:56 27 4
gpt4 key购买 nike

我知道类加载对于在运行时使用类名加载类很有用。

然而,在我们的项目中使用 JDBC 时,我们知道我们将使用哪个驱动程序,并且大多数驱动程序管理器字符串是硬编码的。

我的问题是:为什么我们要在这里使用 Class.forName("JDBC_DRIVER") 加载驱动程序?
为什么我们不能继续在类路径中添加驱动程序?因为我们知道要使用哪个驱动程序 jar。

我相信 Class.forName(JDBC_DRIVER) 会将驱动程序加载到 DriverManager 中。这是唯一的原因吗?

编辑 1:

DriverManager API doc指出

As part of its(DriverManager) initialization, the DriverManager class will attempt to load the driver classes referenced in the "jdbc.drivers" system property.

Applications no longer need to explictly load JDBC drivers using Class.forName(). Existing programs which currently load JDBC drivers using Class.forName() will continue to work without modification.

然后当我使用 oracle 驱动程序以外的其他驱动程序时;我是否需要更改系统属性中的驱动程序名称字符串?

最佳答案

首先:使用现代 JDBC 驱动程序和当前的 JDK(至少是 Java 6),不再需要调用 Class.forName()JDBC driver classes are now located使用 service provider mechanism .您应该能够简单地删除该调用并保持其余代码不变,它应该会继续工作。

如果您没有使用当前的 JDK(或者如果您的 JDBC 驱动程序没有设置了适当的文件来使用该机制),那么该驱动程序需要注册到DriverManager 使用 registerDriver .该方法通常从实际驱动程序类的静态初始化程序 block 调用,在首次加载该类时触发,因此发出 Class.forName() 可确保驱动程序自行注册(如果尚未完成)。

而且无论您是使用 Class.forName() 还是新的服务提供者机制,您总是都需要类路径上的 JDBC 驱动程序(或通过一些可用的ClassLoader 在运行时,至少)。

tl;dr:是的,调用 Class.forName()唯一用途是确保驱动程序已注册。如果您使用当前的 JDK 和当前的 JDBC 驱动程序,则不再需要此调用。

关于java - 'Class.forName("MY_JDBC_DRIVER")' 的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37082542/

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