JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成。JDBC 为工具/数据库开发人员提供了一个标准的 API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序。

有了JDBC,向各种关系数据发送 SQL 语句就是一件很容易的事。换言之,有了 JDBC API,就不必为访问 Sybase 数据库专门写一个程序,为访问 Oracle 数据库又专门写一个程序,或为访问 Informix 数据库又编写另一个程序等等,程序员只需用 JDBC API 写一个程序就够了,它可向相应数据库发送 SQL 调用。

在正式介绍 JDBC 之前,要先来认识应用程序如何与数据库进行沟通。数据库本身是个独立运行的应用程序,编写的应用程序是利用网络通信协议与数据库进行命令交换,以进行数据的增删查找。

jdbc1

通常应用程序会利用一组专门与数据库进行通信协议的程序库,以简化与数据库沟通时的程序编写。

jdbc2

问题的重点在于,你的应用程序如何调用这组程序库?不同的数据库通常会有不同的通信协议,用以连接不同数据库的程序库在 API 上也会有所不同,如果应用程序直接使用这些程序库,例如:

1
2
3
XySqlConnection conn = new XySqlConnection("localhost", "root", "1234");
conn.selectDB("gossip");
XySqlQuery query = conn.query("SELECT * FROM T_USER");

假设这段代码中的 API 是某 Xy 数据库厂商程序库所提供,应用程序中要使用到数据库连接时,都会直接调用这些 API,若哪天应用程序打算改用 Ab 厂商数据库及其提供的数据库连接 API,那就得修改相关的代码。

另一个考量是,若 Xy 数据库厂商的程序库底层实际上使用了与操作系统相关的功能,若只打算换个操作系统,则就还得先权衡一下,是否有提供该平台的数据库的程序库。

JDBC 基本上就是用来解决这些问题,它定义一组标准类与接口,应用程序需要连接数据库时就调用这组标准 API,而标准 API 中的接口会由数据库厂商实现,通常称为 JDBC 驱动程序 (Driver)。

jdbc3

JDBC 标准主要分为两个部分: JDBC 应用程序开发者接口 (ApplicationDeveloper Interface) 以及 JDBC 驱动程序开发者接口(Driver Developer Interface)。如果应用程序需要连接数据库,就是调用 JDBC 应用程序开发者接口,相关 API 主要在 java.sql 与javax.sql 两个包中。JDBC 驱动程序开发者接口则是数据库厂商要实现驱动程序时的规范,一般开发者并不用了解。

jdbc4

使用如下 JDBC 代码进行连接数据库进行处理:

1
2
3
Connection conn = DriverManager.getConnection(…);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM T_USER");

假设这段代码是连接 MySQL 数据库,你会需要在 Classpath 中设置 MySQL 对应 JDBC 的驱动程序。具体来说,就是在 Classpath 中设置一个 JAR 文件,此时应用程序、JDBC 与数据库的关系如下图所示。

jdbc5

如果将来要换为 Oracle 数据库,那么只要置换 Oracle 驱动程序。具体来说,就是在 Classpath 改设为Oracle 驱动程序的 JAR 文件,而应用程序本身不用修改,如下图所示。

jdbc6

如果开发应用程序需要操作数据库,是通过 JDBC 所提供的接口来设计程序,则理论上在必须更换数据库时,应用程序无须进行修改,只需要更换数据库驱动程序实现,即可对另一个数据库进行操作。

JDBC 希望达到的目的,是希望让 Java 程序员在编写数据库操作程序的时候,可以有个统一的接口,无须依赖于特定的数据库 API,希望达到“写一个 Java 程序,操作所有的数据库”的目的。

注意:实际上在编写 Java 程序时,会因为使用了数据库或驱动程序特定的功能,而在转移数据库时仍得对程序进行修改。例如,使用了特定于某数据库的 SQL语法、数据类型或内建函数调用等。

—EOF—