开发者学堂课程【JDBC数据库开发入门:JDBC 的原理】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/29/detail/629
JDBC 的原理
1、 JDBC 原理
早期 SUN 公司的天才们想编写一套可以连接天下所有数据库的 API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了。
后来 SUN 开始与数据库厂商们讨论,最终得出的结论是,由 SUN 提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准,然后各个数据库厂商会遵循 SUN 的规范提供一套访问自己公司的数据库服务器的 API 出现。
SUN 提供的规范命名为 JDBC,而各个厂商提供的,遵循了 JDBC 规范的,可以访问自己数据库的 API 被称之为驱动。
其实 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“也需要改变。
连接不同数据库的区别就在于这四大参数,四大参数一改就可以连接另外一个数据库了,当然,需要配合驱动包来改。
•导 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 包:
可以替换 Class.ForName("com.mysql.jdbc.Driver");//加载驱动类(注册驱动)为下面两句,效果是一样的
有了 Class.ForName("com.mysql.jdbc.Driver");//加载驱动类(注册驱动)程序内容自己就加载出来了,无需输入下面两句
2、Oracle类jar包
打开后找到静态代码
所有的 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");//加载驱动类(注册驱动)