一、ODBC介绍
说到JDBC,很容易让人联想到另一个十分熟悉的字眼“ODBC”。它们之间有没有联系呢?如果有,那么它们之间又是怎样的关系呢?
ODBC是OpenDatabaseConnectivity的英文简写,用C语言实现的,标准应用程序数据接口。通过ODBCAPI,应用程序可以存取保存在多种不同数据库管理系统(DBMS)中的数据,而不论每个DBMS使用了何种数据存储格式和编程接口。
ODBC的结构模型:
ODBC的结构包括四个主要部分:
- 应用程序接口:屏蔽不同的ODBC数据库驱动器之间函数调用的差别,为用户提供统一的SQL编程接口。
- 驱动器管理器:为应用程序装载数据库驱动器。
- 数据库驱动器:实现ODBC的函数调用,提供对特定数据源的SQL请求。如果需要,数据库驱动器将修改应用程序的请求,使得请求符合相关的DBMS所支持的文法。
- 数据源:由用户想要存取的数据以及与它相关的操作系统、DBMS和用于访问DBMS的网络平台组成。
虽然ODBC驱动器管理器的主要目的是加载数据库驱动器,以便ODBC函数调用,但是数据库驱动器本身也执行ODBC函数调用,并与数据库相互配合。因此当应用系统发出调用与数据源进行连接时,数据库驱动器能管理通信协议。当建立起与数据源的连接时,数据库驱动器便能处理应用系统向DBMS发出的请求,对分析或发自数据源的设计进行必要的翻译,并将结果返回给应用系统。
二、JDBC的诞生
自从Java于1995年5月正式公布以来,Java风靡全球。出现大量的用java语言编写的程序,其中也包括数据库应用程序。由于没有一个Java语言的API,编程人员不得不在Java程序中加入C语言的ODBC函数调用。这就使很多Java的优秀特性无法充分发挥,比如平台无关性、面向对象特性等。随着越来越多的编程人员对Java语言的日益喜爱,越来越多的公司在Java程序开发上投入的精力日益增加,对java语言接口的访问数据库的API的要求越来越强烈。也由于ODBC的有其不足之处,比如它并不容易使用,没有面向对象的特性等等,SUN公司决定开发一Java语言为接口的数据库应用程序开发接口。在JDK1.x版本中,JDBC只是一个可选部件,到了JDK1.1公布时,SQL类包(也就是JDBCAPI)就成为Java语言的标准部件。
JDBC是一种可用于执行SQL语句的JavaAPI。方便发人员可以用纯Java语言编写完整的数据库应用程序。
1、JDBC的由来
1)直接使用socket协议访问数据库
应用程序可以直接通过多种方式访问数据库,最普通的是通过socket访问数据库。以Mysql 为例:首先通过程序通过socket和数据库建立了TCP连接,把准备执行的SQL语句或命令封装成特定于Mysql 数据库的应用层数据包,发送给Mysql 数据库,Mysql数据库执行命令,将结果封装成数据包并返回给应用,应用程序进行解析,显示结果给客户端。如下图所示:
2)通过JDBC访问数据库:
令人抓狂的是,Oracle, DB2,Postgresql等其他数据库都有一套属于自己的应用层访问协议。 他们的网络访问协议和Mysql 的完全不一样 ! 这就意味着之前写的针对Mysql 的程序无法针对其他数据库通用, 如果想切换数据库, 每个程序都得另起炉灶写一套代码!直接使用socket访问数据库耦合度太高了,必须得有一个抽象层屏蔽这些细节!
为此,JDK专门提供了一系列针对这个抽象层的统一接口—JDBC(Java Data Base Connectivity,java数据库连接),称为JDBC规范。数据库厂商需要实现JDBC规范中的某些接口(实现中应包含特定数据库的应用层协议的转换/解析等),这些接口统被称为 XX数据库驱动 。如下图所示
数据库厂商实现这些接口一般以单个的jar文件发布,如:
mysql-conn