(一)JDBC入门及简介
引用百度对JDBC的解释:
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的一些理解:
在正式介绍JDBC 之前,要先来认识应用程序如何与数据库进行沟通。数据库本身是个独立运行的应用程序,编写的应用程序是利用网络通信协议与数据库进行命令交换,以进行数据的增删查找。
通常应用程序会利用一组专门与数据库进行通信协议的程序库,以简化与数据库沟通时的程序编写。
问题的重点在于,你的应用程序如何调用这组程序库?不同的数据库通常会有不同的通信协议,用以连接不同数据库的程序库在API 上也会有所不同,如果应用程序直接使用这些程序库,例如:
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)。
JDBC 标准主要分为两个部分: JDBC 应用程序开发者接口(ApplicationDeveloper Interface)以及JDBC 驱动程序开发者接口(Driver Developer Interface)。如果应用程序需要连接数据库,就是调用JDBC 应用程序开发者接口,相关API 主要在java.sql 与javax.sql 两个包中。JDBC 驱动程序开发者接口则是数据库厂商要实现驱动程序时的规范,一般开发者并不用了解。
使用如下JDBC代码进行连接数据库进行处理:
Connection conn = DriverManager.getConnection(…);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM T_USER");
假设这段代码是连接MySQL 数据库,你会需要在Classpath 中设置MySQL 对应JDBC的驱动程序。具体来说,就是在Classpath 中设置一个JAR文件,此时应用程序、JDBC 与数据库的关系如下图所示。
如果将来要换为Oracle 数据库,那么只要置换Oracle 驱动程序。具体来说,就是在Classpath 改设为Oracle 驱动程序的JAR 文件,而应用程序本身不用修改,如下图所示。
如果开发应用程序需要操作数据库,是通过JDBC 所提供的接口来设计程序,则理论上在必须更换数据库时,应用程序无须进行修改,只需要更换数据库驱动程序实现,即可对另一个数据库进行操作。
JDBC 希望达到的目的,是希望让Java 程序员在编写数据库操作程序的时候,可以有个统一的接口,无须依赖于特定的数据库API,希望达到“写一个Java 程序,操作所有的数据库”的目的。
注意:实际上在编写Java 程序时,会因为使用了数据库或驱动程序特定的功能,而在转移数据库时仍得对程序进行修改。例如,使用了特定于某数据库的SQL语法、数据类型或内建函数调用等。