java – “Class.forName”(“MY_JDBC_DRIVER”)的目的是什么?

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

然而,在我们的项目中使用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驱动程序没有设置适当的文件来使用该机制),则驱动程序需要使用registerDriver向DriverManager注册。该方法通常从实际驱动程序类的静态初始化程序块,当类首次加载时被触发,因此发出Class.forName()可确保驱动程序注册自身(如果尚未完成)。

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

tl; dr:是的,只有使用该Class.forName()调用才能确保驱动程序被注册。如果您使用当前的JDK和当前的JDBC驱动程序,则不再需要此调用。

http://stackoverflow.com/questions/7662902/what-is-the-purpose-of-class-fornamemy-jdbc-driver

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – “Class.forName”(“MY_JDBC_DRIVER”)的目的是什么?