在jdbc中一个重要的接口类就是java.sql.Driver,其中有一个重要的方法:Connection connect(String url, java.util.Propeties info);从这个方法可以看到,Driver类的作用就是返回一个connection。

public interface DataSource  extends CommonDataSource, Wrapper {
Connection getConnection() throws SQLException;
Connection getConnection(String username, String password)
throws SQLException;
// DaatSource的方法,就是要获取一个Connection,有了Connection,就可以通信了,这就是开发者关心的,其实现细节不需要了解,
//DataSource的意义就在这里
}

  在com.mysql.cj.jdbc.ConnectionImpl类,实现了java.sql.Connection接口,这也是在开发中要加载驱动的原因,其源码27000行,能不能看懂就是你的功力了。在java.sql.DriverManager中看到了Class.forName()函数的调用,说明了在加载sql相关的类。

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
//
// Register ourselves with the DriverManager
//
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
public Driver() throws SQLException {
// Required for Class.forName().newInstance()
}
}
最终,获取Connnection的是DriverManager getConnection(String,Properties,Class<?>)这句代码:
Connection con =aDriver.driver.connect(url,info);而com.mysql.cj.jdbc.NonResgisteringDriver类给出了获得Connection的代码。

在springboot2.0中又加入了DataSourceBuilder类,配置数据库连接池,真的是能为程序员做的都做了。

java中jdbc源码解读的更多相关文章

  1. go中panic源码解读

    panic源码解读 前言 panic的作用 panic使用场景 看下实现 gopanic gorecover fatalpanic 总结 参考 panic源码解读 前言 本文是在go version ...

  2. Java中ArrayList源码分析

    一.简介 ArrayList是一个数组队列,相当于动态数组.每个ArrayList实例都有自己的容量,该容量至少和所存储数据的个数一样大小,在每次添加数据时,它会使用ensureCapacity()保 ...

  3. Java集合ArrayList源码解读

    最近在回顾数据结构,想到JDK这样好的代码资源不利用有点可惜,这是第一篇,花了心思.篇幅有点长,希望想看的朋友认真看下去,提出宝贵的意见.  :) 内部原理 ArrayList 的3个字段 priva ...

  4. Java中Thread源码剖析

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 关于线程,用很长时间了,主线程下的子线程去做一些事情,就是一个代理模式,主线程分代理权给子线程,子线 ...

  5. Java中HashMap源码分析

    一.HashMap概述 HashMap基于哈希表的Map接口的实现.此实现提供所有可选的映射操作,并允许使用null值和null键.(除了不同步和允许使用null之外,HashMap类与Hashtab ...

  6. go中waitGroup源码解读

    waitGroup源码刨铣 前言 WaitGroup实现 noCopy state1 Add Wait 总结 参考 waitGroup源码刨铣 前言 学习下waitGroup的实现 本文是在go ve ...

  7. etcd中watch源码解读

    etcd中watch的源码解析 前言 client端的代码 Watch newWatcherGrpcStream run newWatchClient serveSubstream server端的代 ...

  8. java中Object源码理解

    java阅读笔记 1.object getClass() 返回是的此object运行时的类,返回的对象是被object锁定的对象,调用这个方法不需要进行强转 public static void ma ...

  9. java中LinkedList源码分析

    ArrayList是动态数组,其实本质就是对数组的操作.那么LinkedList实现原理和ArrayList是完全不一样的.现在就来分析一下ArrayList和LinkeList的优劣吧LinkedL ...

随机推荐

  1. py3 pymysql

    虽然大家可能在python2.x中用习惯了mysqldb,但是在python3.x中已经不支持那个组件了. 取而代之的是: import pymysql 所以,大家pip起来吧.另外,mysql官方出 ...

  2. H3C505

    H3C505 1.立方体案例 2.3D变换 1)景深透视 prospective:xx px; 设置观察元素的距离,数值小时,在元素内进行观察 prospective-origin: xpx,xpx ...

  3. 1、html基础认识&常用标签(1)

    从今天期我们进入前端的学习,先学习html,没有任何复杂难懂的逻辑需要烧脑,只需要记忆.练习.练习.练习. 本篇导航: HTML初识 常用标签介绍 <body>内常用标签 一.HTML初识 ...

  4. 近期 Unity 提交苹果审核被拒的问题

    游戏提交苹果审核,被打回.在 bugly 上没有查到崩溃信息,苹果给了 crash 日志也说明. 拒绝原因如下: Your app crashed on iPad or iPhone running ...

  5. Reactor反应器模式 (epoll)

    1. 背景 最近在看redis源码,主体流程看完了. 在网上看到了reactor模式,看了一下,其实我们经常使用这种模式. 2. 什么是reactor模式 反应器设计模式(Reactor patter ...

  6. hadoop-网站收藏

    Ubuntu14.04安装配置Hadoop2.6.0(完全分布式)与 wordcount实例运行 http://www.linuxidc.com/Linux/2015-01/112029p2.htm ...

  7. JSP展示两位小数

    <td class="thCenter"> <fmt:formatNumber type="number" value="${rec ...

  8. jvm理论-常量池-string

    字符串常量池-常量项(cp_info)结构 CONSTANT_String_info{ u1 tag=8; u2 string_index;//存放 CONSTANT_Utf8_info 指针 } C ...

  9. ES6 与 React

    Node和NPM/*安装npm*/npm installnpm install <package>npm install -g <package> /*更新安装包*/npm u ...

  10. HashTable代码解析

    HashTable继承关系如下: HashTable是一个线程安全的[键-值对]存储结构.其存储结构和HashMap相同,参考这里. 1. HashTable定义了一个类型为Entry<K,V& ...