驱动程序管理器是负责管理驱动程序的,驱动注册以后,会保存在DriverManager中的已注册列表中
后续的处理就可以对这个列表进行操作
简言之,驱动管理器,就是字面含义,主要负责就是管理 驱动

概述

提供管理一组 JDBC 驱动程序的基本服务。
驱动注册中提到过,拥有初始化方法  loadInitialDrivers();
主要两件事情:
读取jdbc.drivers系统属性加载以及查询符合4.0规范的驱动程序加载。
DriverManager 类会尝试加载在 "jdbc.drivers" 系统属性中引用的驱动程序类。
这允许用户定制由他们的应用程序使用的 JDBC Driver。例如,可以在properties 文件中,指定:
jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.taste.ourDriver
JDBC 4.0 Drivers 必须包括 META-INF/services/java.sql.Driver 文件。此文件包含 java.sql.Driver 的 JDBC 驱动程序实现的名称。
例如,要加载 my.sql.Driver 类,META-INF/services/java.sql.Driver 文件需要包含下面的条目:
my.sql.Driver
应用程序不再需要使用 Class.forName() 显式地加载 JDBC 驱动程序。
当前使用 Class.forName() 加载 JDBC 驱动程序的现有程序将在不作修改的情况下继续工作。
在调用 getConnection 方法时,DriverManager 会试着从初始化时加载的那些驱动程序以及使用与当前 applet 或应用程序相同的类加载器显式加载的那些驱动程序中查找合适的驱动程序。

创建连接

DriverManager负责驱动程序管理,数据库驱动则是为了应用程序服务的,所以DriverManager的重要任务就是提供连接的获取。
通过DriverManager获得连接,对应用程序开发者是非常重要的一件事情。
通过getConnection方法获得Connection对象
可以看得出来,三个公共的getConnection方法并没有什么太多逻辑,只是参数形式的适配,方法内部调用的都是私有的getConnection方法
在方法内部主要就是循环遍历所有的已注册的驱动程序,尝试建立连接
如果建立连接成功,就返回这个连接

驱动程序查找

DriverManager管理驱动程序,不仅仅提供了借助于驱动程序创建连接的能力
还能够返回给定的Driver或者Driver 列表
public static Driver getDriver(String url) throws SQLException  
public static java.util.Enumeration<Driver> getDrivers()  

getDriver
给定一个URL,查找能理解给定 URL 的驱动程序。DriverManager 试图从已注册的 JDBC 驱动程序集中选择一个适当的驱动程序。 
如果不存在throw new SQLException("No suitable driver", "08001");
getDrivers
getDrivers 返回的是一个枚举  java.util.Enumeration<Driver>

注册与卸载

如同仓库,有进货和出货,DriverManager作为驱动程序管理器,需要提供注册和卸载的能力。
相关的方法为registerDriver和deregisterDriver
注册和卸载应用程序开发者不需要过多关注 
注册
有两个版本的注册方法,核心是一样的,都是用于将驱动程序记录在案,保存在容器中
新加载的驱动程序类应该调用 registerDriver 方法让 DriverManager 知道自己
两个方法的区别在于new DriverInfo(driver, da)的第二个参数,类型为DriverAction
当驱动程序想要被驱动管理器通知时必须实现的接口。
JDBC驱动程序的静态初始化块中使用双参数版本的注册方法时,当驱动程序被卸载时,会被调用。
卸载
public static void deregisterDriver(Driver driver)
throws SQLException

从DriverManager的注册驱动程序列表中移除指定的驱动程序。
如果参数为NULL,什么都不做
如果存在安全管理器且它的checkPermission拒绝权限,则会抛出SecurityException。
如果在注册的驱动程序列表中没有找到指定的驱动程序,什么都不做;如果找到驱动程序,它将从注册驱动程序列表中删除。
如果在注册JDBC驱动程序时指定了DriverAction ,那么在从注册驱动程序列表中删除驱动程序之前,将调用他的deregister方法。

连接超时设置

驱动程序试图连接到某一数据库时的最大等待时长loginTimeout,以秒为单位,可以对这个数值进行设置和读取。
public static void setLoginTimeout(int seconds)

public static int getLoginTimeout()

日志

DriverManager内部有一个PrintWriter
这个PrintWriter 是DriverManager 和所有驱动程序使用的日志/追踪 对象
提供了set和get方法
public static void setLogWriter(java.io.PrintWriter out)
public static java.io.PrintWriter getLogWriter() 
除了能够对日志、追踪对象进行设置和获取外
还有日志记录方法,借助于logWriter进行写入,然后刷新
public  static void println(String message)
 

总结

DriverManager用于管理驱动程序以及驱动程序的注册相关,应用程序开发者主要关注于借助于驱动程序管理器创建指定的连接
也就是说重点关注于getConnection方法,所有后续的数据库操作都要基于这个连接进行,其他的一些方法了解下即可,开发环境中是基本不会直接接触的
原文地址:DriverManager 驱动管理器类简介 JDBC简介(三)

转载于:https://www.cnblogs.com/noteless/p/10275323.html

DriverManager 驱动管理器类简介 JDBC简介(三)相关推荐

  1. JDBC、驱动管理器与DataSource

    一.JDBC 与 DriverManager JDBC的全称是Java数据库连接(Java Database Connectivity),它是一套用于执行SQL语句的Java API.应用程序可通过这 ...

  2. Data Source与数据库连接池简介 JDBC简介(八)

    DataSource是作为DriverManager的替代品而推出的,DataSource 对象是获取连接的首选方法. 起源 为何放弃DriverManager DriverManager负责管理驱动 ...

  3. Django中--自定义模型管理器类

    BookInfo.objects.all()->objects是一个什么东西呢? 答:objects是models.Manger类的一个对象,是Django帮我自动生成的管理器对象,通过这个管理 ...

  4. Django:admin管理后台2,ModelAdmin模型管理器类

    https://docs.djangoproject.com/zh-hans/3.2/ref/contrib/admin/ admin.py from django.contrib import ad ...

  5. 【Django入门】——模型管理器对象、模型管理器类和模型类

    文章目录 一.模型管理器对象 1. 自定义模型管理器对象 2. 自定义模型管理器类 3. 自定义模型管理器类应用 3.1 重写框架的方法 3.2 封装自定义方法 4. 模型管理器对象的`model`属 ...

  6. Python Django,模型,模型管理器类(models.Manager)(与数据库交互的接口),自定义模型管理器类

    模型类.objects.all() ---> objects是Django自动生成的管理器对象,通过这个管理器对象可以实现与数据库的交互. 定义模型类时可以为模型类指定自定义的管理类对象,指定后 ...

  7. deepin显卡驱动管理器在哪_deepin20 安装英伟达闭源驱动的步骤详解

    第一步.安装深度的"显卡驱动器" 在deepin v20 中默认没有显卡驱动管理器,需要命令行安装,命令如下(刚开始一直出错,当我第一次打开应用商店,就可以安装了,好神奇): su ...

  8. deepin显卡驱动管理器在哪_deepin显卡驱动管理器切换NV-PRIME失败的解决方案

    卸载一切可能已安装的驱动. 删除大黄蜂所安装的软件sudo dpkg -l | grep -i nvidia | awk '{ print $2 }' | cut -d: -f1 | xargs ap ...

  9. cocos植物大战僵尸(五)选择植物卡片:待选择植物卡片管理器类

    2.4.2 待选择植物卡片管理器类 此类管理所有本关卡能选择的卡片. //从关卡配置文件中读取坐标,卡片名并显示出来 bool CWaitChooseCardMgr::levelConfigLoad( ...

最新文章

  1. Asp.net MVC3.0 入门指南 7.1 展示查找页面
  2. ft232 mac usb串口驱动_记Macbook Pro配合FT232使用PN532模块
  3. 操作系统实验报告14:Peterson 算法
  4. 《当90后遇上创业》导读
  5. 201709-5 除法 ccf(树状数组)
  6. 2020年Q3笔记本电脑出货量:惠普反超联想居首位 苹果第四
  7. 动态规划——最长公共子序列
  8. SQLGrammarException错误
  9. css中表居中,CSS DIV中表格居中显示
  10. make 及 make clean 的作用
  11. 蚂蚁金服出品,这个企业级前端应用框架你值得拥有
  12. STM32使用大彩屏程序总结(二)
  13. Microsoft Visual Studio - 代码格式化设置项
  14. 内网直播局域网直播校园直播播控系统如何建设
  15. python解一元二次方程虚根_Python编程实现数学运算求一元二次方程的实根算法示例...
  16. 中国移动首次明确的LTE终端频率要求
  17. position粘性定位sticky
  18. PCB设计---无源晶振和有源晶振
  19. 2020暨南大学计算机学硕上岸经验分享ʕ •ᴥ•ʔ
  20. Jetson AGX xavier测试六叶树Usb转Can卡通信记录笔记

热门文章

  1. 李德毅院士:新一代人工智能十问
  2. 教AI区分因果关系和相关性,将改变下一代 AI 的研发
  3. 国产半导体路在何方,瓦森纳与光刻机你了解多少
  4. 华为:对部分顶尖学生实行年薪制 最高200万元
  5. Gartner重磅发布近40页PPT,详解2017年十大战略技术趋势
  6. 太扎心!人艰不拆!16 个程序员专属笑话讲给你听
  7. Qt笔记之使用设计器自定义窗口标题栏
  8. 第二十章:异步和文件I/O.(十一)
  9. 类 或 对象 的一些小点 【仅记录,方便以后查阅】
  10. zabbix图表出现中文乱码