驱动程序管理器是负责管理驱动程序的,驱动注册以后,会保存在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简介(三)的更多相关文章

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

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

  2. JDBC 异常简介 jDBC简介(六)

    SQL 异常简介 对于数据库的操作访问,必然也很可能抛出异常. JDBC中定义了SQLException,用于描述数据库相关操作中可能出现的异常情况. java.sql.SQLException    ...

  3. [连载]《C#通讯(串口和网络)框架的设计与实现》-4.设备驱动管理器的设计

    目       录 第四章           设备驱动管理器的设计... 2 4.1           接口定义... 2 4.2           设备容器... 7 4.3          ...

  4. X509证书信任管理器类的详解

    在JSSE中,证书信任管理器类就是实现了接口X509TrustManager的类.我们可以自己实现该接口,让它信任我们指定的证书. 接口X509TrustManager有下述三个公有的方法需要我们实现 ...

  5. VS2013中Nuget程序包管理器控制台使用入门(三)-项目实战(原创)

    VS2013中Nuget程序包管理器控制台使用入门(三)-项目实战 1.给指定项目安装Newtonsoft.Json ,Version 4.5.11 PM> Install-Package Ne ...

  6. Django 自定义模型管理器类2个应用场景

    class BookManager(models.Manager): # 改变查询集的结果集 def all(self): books = super().all() # QuerySet books ...

  7. 好用的Quartz管理器类

    转发的代码,原理就不提了 下面直接上代码: QuartzManager.java 动态添加.修改和删除定时任务管理类 import org.quartz.CronScheduleBuilder; im ...

  8. JDBC简介及JDBC编写步骤及常见API

    JDBC : Java Database Connectivity,Java数据库连接.SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC. JDBC就像一座桥 ...

  9. jdbc连接数据库三种方式

    ---恢复内容开始--- 第一种: public class Demo1 { //连接数据库的URL private String url = "jdbc:mysql://localhost ...

随机推荐

  1. js实现八皇后,回溯法

    八皇后问题:将八个皇后摆在一张8*8的国际象棋棋盘上,使每个皇后都无法吃掉别的皇后,一共有多少种摆法? 两个皇后不能同时在同一行,同一列,和斜对角线的位置上,使用回溯法解决. 从第一行选个位置开始放棋 ...

  2. node05

    1.ejs: const ejs = require('ejs') ejs.renderFile('./template/a.ejs', {name:'cc'}, function (err, dat ...

  3. [LeetCode] New 21 Game 新二十一点游戏

    Alice plays the following game, loosely based on the card game "21". Alice starts with 0 p ...

  4. Spring Security中html页面设置hasRole无效的问题

    Spring Security中html页面设置hasRole无效的问题 一.前言 学了几天的spring Security,偶然发现的hasRole和hasAnyAuthority的区别.当然,可能 ...

  5. 在阿里云ECS CentOS7上部署基于MongoDB+Node.js的博客

    前言:这是一篇教你如何在阿里云的ECS CentOS 7服务器上搭建一个个人博客的教程,教程比较基础,笔者尽可能比较详细的把每一步都罗列下来,包括所需软件的下载安装和域名的绑定,笔者在此之前对Linu ...

  6. BOM与DOM操作

    BOM: OM-JavaScript是运行在浏览器中的,所以提供了一系列对象用于和浏览器窗口进行交互,这些对象主要包括window.document.location.navigator和screen ...

  7. UEditor之实现配置简单的图片上传示例

    UEditor之实现配置简单的图片上传示例 原创 2016年06月11日 18:27:31 开心一笑 下班后,阿华到楼下小超市买毛巾,刚买完出来,就遇到同一办公楼里另一家公司的阿菲,之前与她远远的有过 ...

  8. Python-字典与json的转换

    #json是字符串,只不过长得像字典 import json user_info='''{"niuhy":1234,"shanbl":44566}''' #js ...

  9. IOS - 上APPSTORE为何因IPv6被拒?

    http://blog.csdn.net/wanglixin1999/article/details/52182001

  10. ubuntu Nvidia driver install

    在图形界面中,有软件和更新,可以使用附加驱动来更新 最上面的驱动是最新版本,英伟达目前Linux最新的版本是375.39 后面的括号,专有意思是代表英伟达自家的驱动,不开源 选择好之后点击应用更改 关 ...