摘要:随着企业对信息系统应用需求的不断深化,Java EE 开发技术也随之不断演化。JDBC 提供了应用程序与数据库的连接服务。如何根据企业应用系统的环境和特征,选择合适的JDBC 数据库驱动程序工作方式,是开发者在设计系统与后台数据库连接时,首先需要考虑的问题。本文通过对JDBC 四个常用的驱动程序工作方式进行分析与比较,旨在为Java EE 开发者提供一定的参考。
0 引言
作为Java EE 技术框架中的核心服务技术,JDBC(JavaDatabase Connectivity,Java 数据库连接)提供了Java 程序与数据库之间的连接服务。
1 JDBC 驱动程序的工作原理
JDBC 体系结构主要由以下几层构成:Java Application 层,JDBC API 层、JDBC Driver Manager 层和Database 层,如图1所示。其中,Java Application 层包括Java 应用程序和Java小应用程序。JDBC API 层屏蔽了不同数据库驱动程序之间的差别,为在Java 中访问任意类型的数据库提供了技术支持。JDBCDriver Manager 层能够动态的管理和维护数据库查询所需的驱动程序对象,进而实现程序与特定驱动程序的连接。DatabaseDriver 将应用程序数据处理要求,转换为DBMS 能够理解的命令。
Database 层包括要访问的数据库及数据库管理系统。
图1 JDBC 两层结构目前,JDBC 驱动程序采用四种工作方式:JDBC-ODBC 桥驱动、本地API 驱动、网络协议驱动和本地协议驱动。
2 几种工作方式的特工作原理和特征分析
2.1 JDBC-ODBC 桥驱动方式
此种方式下,JDBC 只需要连接到ODBC,通过ODBC 可以连接到ODBC 支持的任意一种数据库,这种连接方式叫做JDBC-ODBC桥。在图1 中的JDBC Driver Manager 层和Database Driver 层之间,增加了JDBC-ODBC Bridge 层和ODBC Driver 层,就构成了JDBC-ODBC 桥驱动结构。使用JDBC-ODBC 桥方式的核心代码是:
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”) ;
C o n n e c t i o n c o n n = D r i v e r M a n a g e r .
getConnection(“jdbc:odbc: 数据源名称”);
该驱动的优势在于:只要本地机装有ODBC 驱动,采用JDBCODBC桥几乎可以访问所有的数据库。但是,由于JDBC-ODBC 先调用ODBC,再由ODBC 去调用本地数据库接口访问数据库。执行效率比较低,对于那些大数据量存取的应用是不适合的。
2.2 本地API 驱动方式
本地API 驱动方式通过在客户端加载数据库厂商提供的本地代码库来访问数据库,而在驱动程序中则包含了Java 代码。这种驱动工作方式效率优于JDBC-ODBC 桥方式。但是,它仍然需要在客户端加载数据库厂商提供的代码库,不适合基于Internet 的应用。本地API 驱动工作方式在图1 中的JDBCDriver Manager 层和Database Driver 层之间,增加了Native-API Driver 层。
使用本地API 驱动工作方式,在JDBC 代码中,设定特定的驱动程序名称和url.不同的驱动程序和不同的数据库,应采用不同驱动程序名称和url.以Oracle 为例,核心代码如下:
Class.forName(“oracle.jdbc.driver.OracleDriver”) ;
C o n n e c t i o n c o n n = D r i v e r M a n a g e r .
getConnection(“jdbc:oracle.thin:@localhoST:1521:Strudent”,“scott”,“tiger”) ;
2.3 网络协议驱动方式
这种驱动的机制是将JDBC 调用转换为中间网络协议,然后转换为DBMS 协议。JDBC 先把对数据库的访问请求传递给网络上的中间件服务器。中间件服务器再把请求翻译为符合数据库规范的调用,再把这种调用传给数据库服务器。中间网络协议层起到一个读取数据库的中间件的作用,能够连接许多类型的数据库,因而是最灵活的JDBC 模式。
此方式不需要在客户端加载数据库厂商提供的代码库,单个驱动程序可以对多个数据库进行访问,可扩充性较好。但是,这种驱动在中间件层仍然需要有配置其它数据库驱动程序,并且由于多了一个中间层传递数据,执行效率不是很高。
2.4 本地协议驱动方式
这种类型的驱动使用Socket,直接在客户端和数据库间通信。驱动完全由Java 实现,因此实现了平台独立性。
由于这种驱动不需要先把JDBC 的调用传给ODBC 或本地数据库接口或者是中间层服务器。所以它的执行效率是非常高的,访问速度也是最快的,安全性也很好。而且,此方式不需要在客户端或服务器端装载任何的软件或驱动,是最直接的Java 实现。但是,由于缺乏足够的文档和技术支持,几乎只有数据库厂商自己才能提供这种类型的JDBC 驱动,同时也需要针对不同的数据库使用不同的驱动程序。
3 比较几种JDBC 数据驱动程序
3.1 从需要数据量操作的角度来说,对于使用Windows 环境开发系统,或者是较小数据量操作的应用程序,应首先考虑使用JDBC-ODBC 驱动。
3.2 从执行效率看,网络协议驱动和本地协议驱动明显优于前两者,应首先考虑。
3.3 从应用看,从internet 应用看,只能考虑网络协议驱动和本地协议驱动,因为网络协议驱动可以把多种数据库驱动都配置在中间层服务器,它适合需要同时连接多个不同种类的数据库,并且对并发连接要求高的应用。
3.4 从客户机部署看,JDBC-ODBC 桥驱动程序需要在客户机上安装的ODBC 驱动程序,而对于本地API 驱动,供应商需要在客户机上安装客户端库。后两种类型则相对简单一些。
4 实验案例
4.1 实验内容
为数据库中的表T_STUDENT 添加一条学号为“0030”,姓名为“王江”,性别为“男”的记录。
4.2 实验分析
本实验的核心在于如何选择合适驱动程序。如果考虑使用本地API 驱动方式,虽然执行效率较高,但是需要到数据库厂商网站下载代码库,并对应的代码库安装到客户端。如果考虑使用网络协议驱动,虽然不需要再客户端进行配置,单个驱动程序就可以对多个数据库进行访问,扩充性性好,但是,需要在中间件层配置数据库的驱动程序,执行效率也不高。如果考虑使用本地协议驱动方式,考虑需要足够的技术支持,独立通过JAVA 编写驱动程序,对于个人或企业来说,是不现实的。以上三种方式,对于实验来说,不是最好的选择。考虑到实验室几乎所有的电脑都能够很快实现ODBC 配置,采用JDBC-ODBC 数据驱动方式,利用现有的条件,实现对后台数据库的访问时可行的。
4.3 实验结果
通过运行测试,证明在此程序中,选用JDBC-ODBC 数据驱动方式,能够完成实验的基本内容,并且,在环境配置上简单可行,执行效率适中。
5 结语
选择合适的数据驱动程序工作方式,有助于有效部署软件,提高软件执行效率,降低运行成本,同时提高可维护性。选择时,需要综合考虑系统开发环境、系统规模、实施成本、执行效率、数据库特征、可扩展性以及对客户端的依赖程度等。(作者:冯永亮,王茹)