2019独角兽企业重金招聘Python工程师标准>>>

首先,我们通过下面的代码看一下JDBC是如何使用Driver的。

Connection conn = null;
String driver = "oracle.jdbc.driver.OracleDriver";
Class.forName(driver);
String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:ORCL";
String user = "toddt";
String password = "mypwd";
conn = DriverManager.getConnection(jdbcUrl,user,password);

从本段代码我们可以看出,使用JDBC时,首先需要将数据库对应的Driver加载到JVM当中;然后通过DriverManager获取到数据库的连接。下面,我们看一下在H2数据库中Driver是如何实现的。

在H2 Driver类实现了java.sql.Driver接口,表明其为JDBC Driver。该类包含了一个static代码段,该段代码在执行Class.forName()时会自动执行即自动执行load方法。

static {

load();

}

load()方法起到了一个非常重要的作用:将Driver本身的一个实例(object)注册到DriverManager。该方法在Driver和DriverManager之间构造了一道桥梁。当DriverManger.getConnection时,会调用Driver的方法生成一个到数据库的Connection。

// Driver INSTANCE = new Driver();public static synchronized Driver load() {try {if (!registered) {registered = true;DriverManager.registerDriver(INSTANCE);//}} catch (SQLException e) {TraceSystem.traceThrowable(e);}return INSTANCE;}

Driver的另一个重要作用是获得到数据库的连接(Connection),在该类中由另外一个方法具体完成该功能:

public Connection connect(String url, Properties info) throws SQLException {try {if (info == null) {info = new Properties();}if (!acceptsURL(url)) {return null;}if (url.equals(DEFAULT_URL)) {return DEFAULT_CONNECTION.get();}Connection c = DbUpgrade.connectOrUpgrade(url, info);if (c != null) {return c;}return new JdbcConnection(url, info);} catch (Exception e) {throw DbException.toSQLException(e);}}

综上,Driver主要有两个作用,一是将Driver本身注册到DriverManager;另外一个是负责获取到数据库的连接。

转载于:https://my.oschina.net/sdzzboy/blog/164115

H2DBEngine——Driver的设计与实现相关推荐

  1. Selenium 2.0的由来及设计架构(三)

    IE Driver IE 是一个很有意思的浏览器,它是由一些协同工作的COM接口构建成的,这一直延伸到Javascript引擎,常见的Javascript变量实际参考了隐含的COM实例.Javascr ...

  2. Selenium 2.0的由来及设计架构

    本文转自:blog.csdn.net/zzzmmmkkk/article/details/10034213 布局和JavaScript 浏览器自动化工具基本上由三部分构成: · 与DOM交互的方法 · ...

  3. Android Binder机制学习总结(二)-Driver部分

    本文主要分析Binder Driver的实现.Binder Driver 的实现代码位于 android kernel中:<kernel>\drivers\staging\android\ ...

  4. [XA]转:一个关于结对编程(Pair Programming)的讲义

    写的实在是太好了,是我见过的对极限编程诠释的最好的讲义,没理由不转载 什么是Pair Programming Pair Programming是一个编程模式(Programming pattern). ...

  5. go使用beedb库进行ORM开发

    beedb是我开发的一个Go进行ORM操作的库,它采用了Go style方式对数据库进行操作,实现了struct到数据表记录的映射.beedb是一个十分轻量级的Go ORM框架,开发这个库的本意降低复 ...

  6. 人人都是 API 设计者:我对 RESTful API、GraphQL、RPC API 的思考

    有一段时间没怎么写文章了,今天提笔写一篇自己对 API 设计的思考.首先,为什么写这个话题呢?其一,我阅读了<阿里研究员谷朴:API 设计最佳实践的思考>一文后受益良多,前两天并转载了这篇 ...

  7. 设备树与驱动的关系_Linux CommonClock Framework分析之四 gpio clk gate驱动实现

    前面我们已经完成了CCF子系统的分析,也说明了如何实现CCF驱动,本章为该专栏的最后一篇文章, 本章我们将实现一个虚拟的gpio clk gate驱动.本章大概分为如下几个章节: 一. 本次驱动开发涉 ...

  8. 【Networking】容器网络大观 SDN 资料汇总

    SDNLAB技术分享(十五):容器网络大观 SDNLAB君 • 16-06-17 •2957 人围观 编者按:本文系SDNLAB技术分享系列,本次分享来自SDN撕X群(群主:大猫猫)群直播,我们希望通 ...

  9. sm总线控制器找不到驱动程序_细说嵌入式系统下的驱动程序设计

    嵌入式系统驱动程序的开发有别于WIndows或Linux.后者除了必须了解新设备的硬件特性,把控制硬件的程序尽快完成之外,还需要设法让驱动程序符合Windows或Linux的规定(大且复杂的架构).但 ...

最新文章

  1. 超详细解读ORB-SLAM3 单目初始化过程(上篇)
  2. 浏览器自动调html5,HTML5 浏览器支持
  3. Virtools 3D行为编程系列(一)
  4. 2017年10月07日普及组 蚂蚁
  5. 简而言之,JUnit:单元测试断言
  6. Bootstrap3 表单支持的控件
  7. 技术:叫我怎么爱上你
  8. C++ select模型聊天室初版
  9. C#编写串口监控软件的详细教程
  10. fluent-bit 本地安装及配置
  11. 普林斯顿微积分读本-[美]阿德里安·班纳著-修订版;杨爽, 赵晓婷, 高璞译
  12. ROS naviagtion analysis: costmap_2d--Costmap2D
  13. shiny导出html,将R Shiny页面导出为PDF
  14. 数据分析从零到精通第二课 Hive和Spark入门
  15. Apollo 初识 • 阿波罗简单配置结构
  16. 用python画滑稽笑脸_2021-01-08 Python day7-day8
  17. Java有参构造方法和无参构造方法详解
  18. 美国股市暴跌,中国路在何方
  19. 够大牌才够质感:京东11.11数读产品品质化新趋
  20. ssh备考-08 SSH三大框架整合

热门文章

  1. MindCon极客周 · 点亮城市接力活动正式启动!来为你的城市打Call,还有多重好礼相送!...
  2. 马斯克发布脑机接口系统!芯片直连大脑,激光开颅放置,可用iPhone操控,网友炸了:这就是黑客帝国...
  3. 数据结构(5)之单链表的操作(补充)
  4. Css常用操作——————分类
  5. cocos2dx event call stack
  6. 纪念lxwcto(潜龙)
  7. java获取vdx文件数据_通过文件名获取文件类型ContentType
  8. 设计模式 — 行为型模式 — 迭代器模式
  9. Tungsten Fabric SDN — Device Manager
  10. Ansible — 示例与最佳实践