加载驱动程序有两种方法:
Class.forName()
DriverManager.registerDriver()
方法1内部也调用DriverManager.registerDriver,方法1是首选方法。
但为什么呢?是否存在任何细微差别或性能等更好? 任何意见都赞赏..
答案 0 :(得分:3)
如果使用Class.forName(),则不需要对特定JDBC驱动程序具有任何编译时依赖性。当您编写可以使用各种数据库的代码时,这尤其有用。
请考虑以下代码:
// Register the PostgreSQL driver
Class.forName("org.postgresql.Driver");
现在将其与:
进行比较import org.postgresql.Driver;
// Register the PostgreSQL driver
DriverManager.registerDriver(new Driver());
并且考虑到在第一个示例中,类名也可能来自属性文件,XML文件等,具体取决于您的应用程序的方便程度。
答案 1 :(得分:2)
JDBC API Tutorial and Reference是此类问题的最佳参考,section of which addresses the role played by the Driver and DriverManager classes。
所有驱动程序类都应该有一个静态初始化程序,负责创建该驱动程序的实例,并在加载Driver类时将其注册到DriverManager。
此外,DriverManager.getConnection()可能是该类中唯一的用户空间友好方法。大多数使用JDBC API的开发人员通常不使用大多数其他方法。所以古老的格言仍然存在 - 使用Class.forName()加载驱动程序,然后使用DriverManager.getConnection()来获取与数据库的连接。
答案 2 :(得分:1)
阅读JavaDoc看起来像Class.forName需要开始,然后事情发生了变化,以至于它不再是首选的方式(或所需的方式)。
答案 3 :(得分:1)
我不得不说,如果通过静态引用驱动程序来构造驱动程序实例,那么您的生活会更容易。一旦你有了,你就可以忽略那些由邪恶构成的DriverManager
。
答案 4 :(得分:1)
“表演等更好吗?”
我想说这次一次性操作的表现是你最不担心的。
如果您使用的是Java EE应用服务器,答案是“不”。您应该设置一个连接池,让它处理加载驱动程序并分发连接。