13.1.2 JDBC的结构及其与数据库的连接
JDBC是由一群类和接口组成,它支持ANSI-92标准,因此,通过调用这些类和接口所提供的成员方法,就可以方便地连接各种不同的数据库,进而使用标准的SQL命令对数据库进行查询、插入、删除、更新等操作。
因为ODBC是用C语言写的,所以Java程序不能直接和ODBC驱动程序通信。JavaSoft创建了JDBC-ODBC桥接驱动程序,由该驱动程序将JDBC API(应用程序编程接口)翻译成ODBC API,它同ODBC驱动程序一起使用。图13-1所示JDBC 驱动程序存取结构。
图13-1 JDBC 驱动程序存取结构
一旦应用程序和数据库建立了连接,应用程序就可以操作这些数据库了。应用程序对数据库的操作,是通过数据库管理器将标准的JDBC指令,转换成适合不同数据库通信的网络协议指令或其他指令。这种指令的转换机制,是基于JDBC API开发的程序可以独立于具体的数据库。如果数据库更换了,只需在应用程序中把原来的数据库驱动程序更换为新的数据库驱动程序便可。
1.Java应用程序
Java程序主要包括Java应用程序和Java Applet程序,它主要根据JDBC方法实现对数据库的访问和操作。完成的主要任务有:请求与数据库建立连接;向数据库发送SQL请求;为结果集定义存储应用和数据类型;查询结果;处理错误;控制传输、提交及关闭连接等操作。
2.JDBC管理器
JDBC管理器为我们提供了一个“驱动程序管理器”,它能够动态地管理和维护数据库查询所需要的所有驱动程序对象,实现Java程序与特定驱动程序的连接,从而体现JDBC“与平台无关”这一特点。完成的主要任务有:为特定数据库选择驱动程序;处理JDBC初始化调用;为每个驱动程序提供JDBC功能的入口;为JDBC调用执行参数等。
3.驱动程序
驱动程序处理JDBC方法,向特定数据库发送SQL请求,并为Java程序获取结果。在必要的时候,驱动程序可以翻译或优化请求,使SQL请求符合DBMS支持的语言。要求驱动程序可以完成下列任务:建立与数据库的连接;向数据库发送请求;用户程序请求时,执行翻译;将错误代码格式化成标准的JDBC错误代码等。
目前最常用的JDBC驱动程序可分为四种类型:
1)JDBC-ODBC桥
这种驱动程序通过连接另一种数据库的ODBC来使用数据库,这称为JDBC-ODBC桥。通过JDBC-ODBC桥,应用程序能够使用ODBC的驱动程序和数据库建立连接,并访问数据库。这种类型驱动程序的优点是适合所有的数据库,因为几乎所有的数据库开发商都提供了相应的ODBC驱动程序。但它也有缺点:运行速度较慢,因为连接的层次太多。
2)本地API
与JDBC-ODBC桥相比,该类型的驱动程序没有ODBC层,它的速度高于JDBC-ODBC桥的速度,但要求在本地机器上安装连接目标数据库的类库。这种方式使用不太方便,因此不太常用。
3)网络协议
这种驱动程序在JDBC与数据库驱动程序之间加有一个称为网络协议的中间件,中间件把应用程序JDBC调用映射到相应的数据库驱动程序上。这种类型的驱动程序最灵活,因为在这种类型下,中间件可以和许多不同的数据库驱动程序建立连接,因此可以和许多不同的数据库建立连接。
4)数据库协议
这种JDBC驱动程序通过实现一定的数据库协议直接和数据库建立连接。这种驱动程序的效率最高,因为它直接和数据库连接。其缺点是当目标数据库类型更换时,必须更换相应的驱动程序。
目前大多数数据库厂商都提供以上四种类型的驱动程序,设计人员可以根据自己的机器环境、软件资源和问题要求选择不同的数据库驱动程序。
前两种类型的驱动程序使用不多,后两种类型的JDBC驱动程序使用较多,后两种类型的JDBC驱动程序也是未来JDBC驱动程序发展的主流技术。
本章的例子采用第一种类型的JDBC驱动程序,即JDBC桥驱动程序。由于JDBC是面向“平台无关性”设计的,所以我们只要在Java数据库应用程序中指定使用某个数据库的JDBC驱动程序,就可以连接并存取指定的数据库。并且,当我们要连接几个不同的数据库时,只需修改程序中的JDBC驱动程序,而无需对其他的程序代码作任何改动。
4.数据库
此处的数据库是指Java程序需要访问的数据库及其数据库管理系统。