数据库中的 JDBC 与 ODBC 是什么?
1. JDBC
- JDBC 全称 Java Database Connectivity,是一种用于 Java 程序访问关系型数据库的 API (应用程序接口)。它是一个抽象的概念,没有具体的叫
JDBC这个名称的包,它只是一个规范,规定了产商在写 JDBC 驱动 的时候必须要遵守的方法。 - 与数据库的交互需要有一些固定功能,而这些方法在
java.sql和javax.sql中进行了定义(注意,只进行了定义,没有具体实现该功能)。这些具体的定义(如建立连接、返回结果集等)合集抽象称为JDBC。 - 无法直接引用
JDBC,因为并不存在这个包,需要引用java.sql和javax.sql中的定义,这些定义合集被称为JDBC。
2. JDBC 驱动?
- 依据上述对 JDBC 的定义,将这些只定义了的方法 具体实现 所生成的代码合集被称为
JDBC 驱动,通常是一个.jar包。 JDBC 驱动是一个包,它是各种具体功能的集合,因此可以直接使用。它是对定义的 具体实现。- 每一个数据库都有其对应的
JDBC 驱动,每个驱动都不一定相同,无法用 MySQL 的驱动去运行 Oracle 的代码,因为具体实现内容不同。 - 在 Java 程序中想要读取数据库的内容,就必须使用
JDBC 驱动,这是因为,在 Java 程序中写一个 SQL 的语句,Java 既不明白这个语句是什么意思,也不知道它要干什么,也无法读取数据库。而为了在实际工作中需要在 Java 程序中读取数据库内容,这个时候JDBC 驱动就可以将你传递进去的 SQL 语句正确传递给对应的数据库,同时返回对应的结果。
3. 为什么会有 JDBC 驱动?与 JDBC 有什么不同?
- 首先要明白
JDBC 驱动是基于JDBC编写的,可以理解为JDBC 驱动遵循 JDBC 规范进行了具体实现,因为 JDBC 是由 JAVA 官方 发布的一套标准的接口,只有定义,没有具体功能。所有的数据库在编写其对应的 JDBC 驱动 的时候,都必须遵守 JDBC 的规范。 JDBC 驱动存在的意义是因为要适应多种不同的数据库,这也是一个 多态 的体现。
4. 为什么每个 JDBC 驱动都不同?
- 每个数据库都有对应的
JDBC 驱动,虽然都统一遵循了 JDBC 规范,但不同的数据库的JDBC 驱动所实现的功能并非完全相同。 - 也就是说,虽然编写
JDBC 驱动的时候,都遵循了 JDBC,但由于不同数据库之间的底层差异,例如:相同的一个查询功能,但是两个数据库的具体语法是不同的。因此就必须对具体功能进行不同的实现,只要传入的语句正确,JDBC 驱动就可以正确拥有返回结果。 - 这是因为,每个数据库都有对应的语法,同一个功能,不同的数据库实现的语句可能不同。因此,
JDBC 驱动就不可以完全一样,而每个数据库都有对应的JDBC 驱动,那么在 Java 程序中需要与对应数据库交互的时候,只需要在调用其对应的JDBC 驱动的时候传入对应的正确的语句,就可以有正确的结果。
5. Java 程序、数据库、JDBC、JDBC 驱动之间的关系?
在 Java 程序 中要与某个 数据库 交互,就需要用到 JDBC 驱动,通过调用不同数据库对应的 JDBC 驱动 包,就可以正确地与对应的数据库进行交互。而不同的 JDBC 驱动 是由不同的数据库厂商进行编写并发布的,但是不同厂商在编写的时候都需要实现由 JAVA 官方 统一发布的 JDBC 标准接口来进行编写。
6. JDBC 驱动如何使用?
在具体的一个 Java 程序中,不会引用具体的驱动包名,而是引用 JDBC,即接口规范合集(包括 java.sql 和 javax.sql),例如建立连接的方法 (Connect)。在具体运行的时候,会自动在 classpath 下寻找对应的具体实现这些方法的 JDBC 驱动包。
7. ODBC
ODBC 全称 Open Database Connectivity,是由微软提出的一套 “通用数据库访问接口标准”。同理,每个数据库厂商都有其对应的 ODBC 驱动,它支持多种语言中使用,包括(C/C++、Python、R 等)。与 Java 调用 JDBC 驱动 不同的地方在于,有些语言在调用 ODBC 驱动 的时候,可能是在另一个包中对 ODBC 驱动 进行了封装,需要查询对应的调用方法。

浙公网安备 33010602011771号