使用Class.forName()
加载JDBC驱动程序的逻辑是什么,而不是提供一些静态方法来执行相同操作的驱动程序?
例如,为什么不调用SomeDriverClass.loadDriver();
并继续正常连接?是否有任何理由调用java.sql.DriverManager.registerDriver()
不会发生这种情况?
答案 0 :(得分:4)
这样,代码在编译期间不需要在类路径中具有驱动程序类。您不希望在编译时类路径中拥有过去,当前和未来的无数不同JDBC驱动程序,以使您的JDBC代码与所有这些数据库兼容。每次升级/替换驱动程序或数据库时,都不希望重新编译代码。您只需要String
中的驱动程序类名称,可以在外部配置(通常是属性或xml文件)。
换句话说:可移植性和可重用性。
如果是供您私人使用,请随心所欲。但是如果你在一个公共分发的库(例如ORM或一些数据库管理工具)中完成它,它就不会变得流行,因为最终用户必须抓住源代码并在每次更改时重新编译它不支持他们的数据库。
答案 1 :(得分:0)
这是服务提供者框架的一部分。静态工厂方法返回的对象的类在编写包含该方法的类时甚至不需要存在。这允许占位符在运行时插入多个实现。
服务提供者框架是一个系统,其中多个服务提供者实现服务,并且系统使实现可供其客户端使用,从而将它们与实现分离。
如果是somedriver.loadDriver()则实现紧密耦合。