JDBC 的原理 | 学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 快速学习 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");//加载驱动类(注册驱动)


            </div>
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
11月前
|
存储 关系型数据库 MySQL
MySQL性能优化指南
【10月更文挑战第16天】MySQL性能优化指南
1021 0
|
移动开发 小程序 JavaScript
微信小程序转uniapp的迁移步骤及遇到的问题
微信小程序转uniapp的迁移步骤及遇到的问题
736 0
微信小程序转uniapp的迁移步骤及遇到的问题