博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDBC 驱动的加载
阅读量:2207 次
发布时间:2019-05-04

本文共 1819 字,大约阅读时间需要 6 分钟。

最初接触JDBC的时,我是这样加载JDBC驱动的

try {
Class.forName("com.mysql.cj.jdbc.Driver"); con=DriverManager.getConnection("jdbc:mysql://localhost:3306/experment1?serverTimezone=Hongkong","root","xxx"); statement=con.createStatement(); } catch (ClassNotFoundException e) {
// TODO Auto-generated catch block e.printStackTrace(); }

那么为什么加载一个类就可以直接使用DriverManager连接到数据库呢?

DriverManager都没进行实例化

后来看了源码才恍然大悟

com.mysql.cj.jdbc.Driver

package com.mysql.cj.jdbc;import java.sql.SQLException;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() }}

注意里面的 s t a t i c 代 码 块 \color{red}{static代码块} static,这个是关键

static代码块内的代码在这个类装载的时候就会运行,无需实例化

然后,DriverManager的registerDriver() 也是一个static方法,所以可以直接调用

(前提是我们开始加载JDBC驱动之前导入了java.sql.DriverManager 这个类)

java.sql.DriverManager.registerDriver(new Driver());

上面的语句做的工作就是把JDBC驱动初始化

继续往深的源码我看了也没什么好说的,这就不展开了,有兴趣的朋友再自行查看,这里是

之后就可以根据所给的数据库地址,用户名,密码进行数据库连接了

con=DriverManager.getConnection("jdbc:mysql://localhost:3306/experment1?serverTimezone=Hongkong","root","xxx");

J2EE 1.2 (December 12, 1999)

J2EE 1.3 (September 24, 2001)
J2EE 1.4 (November 11, 2003)
Java EE 5 (May 11, 2006)
Java EE 6 (December 10, 2009)
Java EE 7 (May 28, 2013,[7] but April 5, 2013 according to spec document. June 12, 2013 was the planned kickoff date[8])
Java EE 8 (August 31, 2017[9])
Jakarta EE 8 (September 10, 2019) - fully compatible with Java EE 8[10]
Jakarta EE 9 (Target: August 31, 2020)[11][12]

转载地址:http://yliyb.baihongyu.com/

你可能感兴趣的文章
搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法
查看>>
搞懂分布式技术3:初探分布式协调服务zookeeper
查看>>
搞懂分布式技术4:ZAB协议概述与选主流程详解
查看>>
搞懂分布式技术5:Zookeeper的配置与集群管理实战
查看>>
搞懂分布式技术6:Zookeeper典型应用场景及实践
查看>>
搞懂分布式技术10:LVS实现负载均衡的原理与实践
查看>>
搞懂分布式技术11:分布式session解决方案与一致性hash
查看>>
搞懂分布式技术12:分布式ID生成方案
查看>>
搞懂分布式技术13:缓存的那些事
查看>>
搞懂分布式技术14:Spring Boot使用注解集成Redis缓存
查看>>
搞懂分布式技术15:缓存更新的套路
查看>>
搞懂分布式技术16:浅谈分布式锁的几种方案
查看>>
搞懂分布式技术17:浅析分布式事务
查看>>
搞懂分布式技术18:分布式事务常用解决方案
查看>>
搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务
查看>>
搞懂分布式技术20:消息队列因何而生
查看>>
搞懂分布式技术21:浅谈分布式消息技术 Kafka
查看>>
后端技术杂谈1:搜索引擎基础倒排索引
查看>>
后端技术杂谈2:搜索引擎工作原理
查看>>
后端技术杂谈3:Lucene基础原理与实践
查看>>