JDBCJavaDataBase Connectivity)是一种可用于执行SQL语句的JavaAPIApplicationProgrammingInterface,应用程序设计接口)。它由一些Java语言写的类、接口组成。JDBC给数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。
通过使用JDBC,开发人员可以很方便地将SQL语句传送给几乎任何一种数据库。也就是说,开发人员可以不必写一个程序访问Sybase,写另一个程序访问Oracle,再写一个程序访问MicrosoftSQLServer。用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统(DBMS)。不但如此,使用Java编写的应用程序可以在任何支持Java的平台上运行,不必在不同的平台上编写不同的应用。JavaJDBC的结合可以让开发人员在开发数据库应用时真正实现WriteOnceRunEverywhere
JDBC支持两层模型,也支持三层模型访问数据库。

JDBCODBC

说到JDBC,很容易让人联想到另一个十分熟悉的字眼ODBC。它们之间有没有联系呢?如果有,那么它们之间又是怎样的关系呢?
ODBCOpenDatabaseConnectivity的英文简写。它是一种用来在相关或不相关的数据库管理系统(DBMS)中存取数据的,用C语言实现的,标准应用程序数据接口。通过ODBCAPI,应用程序可以存取保存在多种不同数据库管理系统(DBMS)中的数据,而不论每个DBMS使用了何种数据存储格式和编程接口。因为ODBC是一个C语言接口,所以ODBCJava中直接使用不适当。从Java中来调用C代码在安全性,健壮性,实现的方便,可移植性等等方面有许多不便。它使得Java在这些方面的许多优点得不到发挥。
 
JDBC API ODBC API之间有以下差别
VC.NETVB.NET之类编程语言使用ODBC API来连接数据库。而Java使用JDBC API来连接数据库。Java 之所以选用JDBC而不是ODBC主要出于以下几个因素:
ODBC API 是用C编写的,而Java不支持C语言的某些特性如指针和析构函数等。JDBCJava编写而且构筑在ODBC的上层。因此,Java程序使用JDBC与数据库进行交互。
如果使用ODBC,则必须在每台机器上手工安装、配置ODBC驱动管理器和其他的驱动器。而JDBC驱动器由于使用Java编写,它可以在任何平台上自动安装、移植、安全地使用。

JDBC 驱动程序的类型

目前JDBC 驱动程序可分为以下四个种类:
* JDBC-ODBC 桥加 ODBC 驱动程序:
JDBC-ODBC 桥使 ODBC 驱动程序可被用作 JDBC 驱动程序。在这种类型的驱动器中,所有的数据库交互都通过ODBC API进行。JDBC驱动器调用ODBC API函数,它依次与后端数据库交互。这种类型的驱动器主要依赖于ODBC API,并要求ODBC API安装在客户端机器上。
* 本地 API - 部份用 Java 来编写的驱动程序:
这种驱动器将JDBC调用转换为特定数据库系统的SQL语句。虽然所有的DBMS都使用标准SQL做数据库交互,但不是每个DBMS都支持SQL的所有特性。例如,某些DBMS不支持外连接和存储过程。因此,这种驱动器只能与特定的DBMS进行交互,但是,在指定的数据库上访问,它的执行速度要比其他驱动器快。
* JDBC 网络纯 Java 驱动程序:
这种驱动器将JDBC函数调用转换为中间网络协议调用,如RMICORBAHTTP调用。网络协议再将这些调用翻译为标准SQL函数调用。
* 本地协议纯 Java 驱动程序:
这种类型的驱动程序将 JDBC 调用直接转换为 DBMS 所使用的网络协议。这将允许从客户机机器上直接调用 DBMS 服务器,是 Intranet 访问的一个很实用的解决方法。由于许多这样的协议都是专用的,因此数据库提供者自己将是主要来源。
 

JDBC能做什么?

简单的说,三件事:
* 与一个数据库建立连接
* 向数据库发送SQL语句
* 处理数据库返回的结果

JDBC API

JDBC API 被描述成为一组抽象的Java接口,JDBC应用程序远可以对某个数据库打开连接,执行SQL语句并且处理结果。最重要的接口是:
*  java.sql.DriverManager 处理驱动的调入并且对产生新的数据库连接提供支持。
*  java.sql.Connection 代表对特定数据库的连接。
*  java.sql.Statement  代表一个特定的容器,来对一个特定的数据库执行SQL语句。
*  java.sql.ResultSet  控制对一个特定语句的行数据的存取。
 
其中java.sql.Statement又有两个子类型:
* java.sql.PreparedStatement  用于执行预编译的SQL语句。
* java.sql.CallableStatement  用于执行对一个数据库内嵌过程的调用。