JDBC 的原理 | 学习笔记

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 快速学习 JDBC 的原理。

开发者学堂课程【JDBC数据库开发入门:JDBC 的原理】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/29/detail/629


JDBC 的原理


1、 JDBC 原理

早期 SUN 公司的天才们想编写一套可以连接天下所有数据库的 API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了。

后来 SUN 开始与数据库厂商们讨论,最终得出的结论是,由 SUN 提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准,然后各个数据库厂商会遵循 SUN 的规范提供一套访问自己公司的数据库服务器的 API 出现。

SUN 提供的规范命名为 JDBC,而各个厂商提供的,遵循了 JDBC 规范的,可以访问自己数据库的 API 被称之为驱动。

图片20.png

其实 JDBC 就是一堆接口,那么谁来提供接口实现呢?

MySQL 要提供,Oracle 也要提供。这些数据库厂商会对这些接口提供实现类,这些实现类有什么用呢?

MySQL 提供的实现类可以用来访问 MySQL,Oracle 提供的实现类专门用来访问Oracle。

这样原先考虑的问题都先转嫁出去了,原先需要写很多语句,后来只需要提供一个接口,其他工作由数据库厂商自己来完成。应用程序需要使用 JDBC API,JDBC API 就是一种接口,这组接口需要实现类,实现类就称之为 JDBC 驱动驱动就是JDBC 的实现。

如何在JDBC代码里找到这个驱动呢,刚才说的就起到了决定性作用 Class.forName(“com.mysql.jdbc.Driver”);这个加载驱动类是 MySQL 提供的,若连接的是 Oracle 数据库,“com.mysql.jdbc.Driver”就需要改变了“jdbc:mysql://localhost:3306/mydb3”、“root”、”123“也需要改变。

图片21.png

连接不同数据库的区别就在于这四大参数,四大参数一改就可以连接另外一个数据库了,当然,需要配合驱动包来改。

导 jar 包:驱动

加载驱动类:class.forName(“类名”);

给出 url、username,其中 url 需要记住

使用 DriveManager 类来得到 Connection 对象

导 jar 包是必须的,提供一个驱动,来连接数据库。再者,必须自己加载驱动类,程序才能找到jar包。

接口 Driver

public interface Driver

每个驱动程序类必须实现的接口。

Java SQL 框架允许多个数据库驱动程序。

每个驱动程序都应该提供一个实现 Driver 接口的类。 DriverManager 会试着加载尽可能多的它可以找到的驱动程序,然后,对于任何给定连接请求,它会让每个驱动程序依次试着连接到目标 URL。 强烈建议每个 Driver 类应该是小型的并且是单独的,这样就可以在不必引入大量支持代码的情况下加载和查询 Driver 类

在加载某一 Driver 类时,它应该创建自己的实例并向 DriverManager 注册该实例。这意味着用户可以通过调用以下程序加载和注册一个驱动程序

Class.forName("foo. bah.Driver")

1、驱动类 jar 包:

图片22.png

可以替换 Class.ForName("com.mysql.jdbc.Driver");//加载驱动类(注册驱动)为下面两句,效果是一样的

图片23.png

有了 Class.ForName("com.mysql.jdbc.Driver");//加载驱动类(注册驱动)程序内容自己就加载出来了,无需输入下面两句

图片24.png

2、Oracle类jar包

打开后找到静态代码

图片25.png

所有的 java.sql.Driver 实现类,都提供了 static 块,块内的代码就是把自己注册到 DriverManager 中!注册完就可以找到联系。

jdbc4.0之后,每个驱动 jar 包中,在 META-INF/services 目录下提供了一个名为java.sql.Driver 的文件, 文件的内容就是该接口的实现类名称!而4.0之前的版本是需要输入 Class.ForName("com.mysql.jdbc.Driver");//加载驱动类(注册驱动)

但是我们的代码应该兼容老版本的 jdbc,所以还是应该都输入Class.ForName("com.mysql.jdbc.Driver");//加载驱动类(注册驱动)


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
druid Java 数据库连接
SpringBoot原理分析 | Spring Data整合:JDBC、Druid、Mybatis
SpringBoot原理分析 | Spring Data整合:JDBC、Druid、Mybatis
137 0
|
SQL Java 数据库连接
联表查询 && 索引 && 事务 && JDBC使用 &&CPU工作原理 && 线程概念 && Thread类的用法
联表查询 && 索引 && 事务 && JDBC使用 &&CPU工作原理 && 线程概念 && Thread类的用法
160 0
|
4月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
60 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
4月前
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
155 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
4月前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
39 6
|
4月前
|
存储 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
52 4
|
4月前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(中)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
32 3
|
5月前
|
SQL Java 关系型数据库
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
70 0
|
6月前
|
SQL Java 关系型数据库
Java与数据库连接技术JDBC关键核心之PreparedStatement以及SQL注入演示解决和原理
Java与数据库连接技术JDBC关键核心之PreparedStatement以及SQL注入演示解决和原理
42 0
|
7月前
|
Java 关系型数据库 MySQL
JDBC学习笔记
JDBC学习笔记