JDBC getConnection 的疑问

d2lorder 2007-08-29 12:52:03
Class.forName("oracle.jdbc.driver.OracleDriver");
DriverManager.getConnection("url", "userName", "password");

api 上说,DriverManager会根据已经load的driver 来找一个适当的作为driver,由此得到connection,小弟想问一下,DriverManager 是如何得知有多少driver load 的???
...全文
296 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bushuang 2007-08-29
  • 打赏
  • 举报
回复
你看下OracleDriver的源代码就可以知道里面肯定有这个方法DriverManager.registerDriver
bushuang 2007-08-29
  • 打赏
  • 举报
回复
JDBC是使用Bridge模式进行设计的,DriverManager就是其中的Abstraction,oracle.jdbc.driver.OracleDriver就是Implementor,oracle.jdbc.driver.OracleDriver是Implementor的一个具体实现(请参考GOF的Bridge模式的描述,前一个Driver是一个接口,后者是一个实现了前面的Driver接口的类。
Bridge模式中,Abstraction(DriverManager)是要拥有一个Implementor(Driver)的引用的,但是我们在使用过程中,并没有将Driver对象注册到DriverManager中去啊,这是怎么回事呢?jdk文档对Driver的描述中有这么一句:
When a Driver class is loaded, it should create an instance of itself and register it with the DriverManager
是oracle.jdbc.driver.OracleDriver在装载完后自动帮我们完成了这一步骤。
bushuang 2007-08-29
  • 打赏
  • 举报
回复
楼上说的不错.当调用Class.forName这个反射方法时就创建了驱动类的一个对象,对象的引用保存在DriverManager中
ariesying 2007-08-29
  • 打赏
  • 举报
回复
作为初始化的一部分,DriverManager 类会尝试加载在 "jdbc.drivers" 系统属性中引用的驱动程序类。这允许用户自定义由他们的应用程序使用的 JDBC Driver。例如,在 ~/.hotjava/properties 文件中,用户可以指定:

jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.taste.ourDriver
程序还可以在任意时间显式地加载 JDBC 驱动程序。例如,my.sql.Driver 是使用以下语句加载的:
Class.forName("my.sql.Driver");
在调用 getConnection 方法时,DriverManager 会试着从初始化时加载的那些驱动程序以及使用与当前 applet 或应用程序相同的类加载器显式加载的那些驱动程序中查找合适的驱动程序。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧