-
Java与数据库的连接——JDBC
2004-04-06
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://jellyfish.blogbus.com/logs/129962.html
Java与数据库的连接——JDBC(from bbs)
一、概述
JDBC是执行SQL语句的Java API。JDBC本身是一个产品的商标名,但它也可被看作为"Ja
va Database Connecivity(Java数据库连接)"。它由一组用Java语言编写的类与接口组成。
JDBC已成为一种供工具/数据库开发者使用的标准API,用户可以用纯Java API来编写数据库
应用。
使用JDBC可以很容易地把SQL语句传送到任何关系型数据库中。换言之,用户不必为访问
Sybase数据库写一个程序,又为访问Oracle数据库写另一个程序。你可以用JDBC API写出唯
一的程序,它能够将SQL语句发送到相应的任何一种数据库。Java与JDBC的结合,使程序员可
以只写一次数据库应用软件后,就能在各种数据库系统上运行。由于Java语言具有健壮性、
安全、易使用、易理解和自动下载到网络等优点,因此,它是数据库应用的一个极好的基础语
言。现在需要找到一种能使Java应用与各种不同数据库对话的方式,而JDBC正是实现这种对
话的一种机制。
JDBC扩充了Java的应用范围。例如,用Java与JDBC API可以发布一种包含远程数据库信
息的Applet的Web页面。企业使用JDBC可以把它的所有雇员信息通过Intranet连接到一个或
多个内部数据库里。毫无疑问,随着Java程序员的不断增加,对Java的数据库的访问需求会越
来越迫切。MIS管理员希望Java与JDBC结合,因为这有助于更容易、更经济地发布企业信息。
商界可以不断地使用已安装的数据库,方便地存取信息,而不必顾及这些数据库是在何种DBM
S系统下存储的。它有助于缩短新应用的开发时间,并可大大简化数据库的安装与版本控制。
一旦程序员编写或更新了应用,并把它放入服务器之后,那么每个人都可以获得这个最新版本
。在商业销售信息服务领域,Java与JDBC则可以更好地向外界客户提供最新信息。二、JDBC的功能与特点
1.JDBC的基本功能
简单地说,JDBC可以做三件事:
·建立与数据库的连接。
·发送SQL语句。
·处理结果。
为说明JDBC的基本功能,现特举一例。下面的程序代码片断实现以上所列的三种基本功
能。
connection on=DriverManager.GetConnection("jdbc:orbc:wombat",
"Login","Password");
statement stmt=con.createstatement();
ResultSet rs=stmt.executeQuery("SELECT a,b,c FROM Table 1");
while (rs.next()){
int x=getInt("a");
string s=getstring("b");
float f=getFloat("c");
}2.JDBC是低级的API与高级API的基础
JDBC是一种"低级"的接口,因为它直接调用SQL命令,但它又可作为构造高级接口与工
具的基础。高级接口是"用户友好的"、更易理解和更为方便的API,由后台将它翻译成如JDB
C这样的低级接口。有两种基于JDBC的高级API正处在开发之中:
一种是嵌入SQL的Java。JDBC要求把SQL语句作为字符串传递给Java方法。嵌入SQL预处
理程序,可让程序员把SQL与Java直接混合使用。例如,在SQL语句中可用Java变量接收或提供
SQL值。嵌入SQL预处理程序,把这种混合的Java/SQL翻译成带JDBC调用的Java。
另一种是把关系数据库表直接映射成Java类。在"对象/关系"的映射中,表中的每一行变
成类的一个实例,每一列的值对应于该实例的一个属性。然后程序员可直接操作Java对象,并
自动生成取、存数据的SQL调用。另外它还提供了更高级的映射,例如在Java类中把多个表的
行结合起来。3.JDBC与ODBC及其它API的比较
目前,Microsoft的ODBC API是访问关系型数据库中应用最广的编程接口,它几乎能将所
有平台的所有数据库连接起来。现在的问题是可否通过Java来使用ODBC呢?回答是肯定的,但
最好的做法是在JDBC帮助下采用JDBC-ODBC桥接方式实现。需要JDBC的理由如下:
(1)Java不能直接使用ODBC。因为ODBC使用C语言接口,如果让Java来调用本机C代码的话
,那么会在安全、属性、健壮性、应用的可移植性等方面带来困难。
(2)不希望把ODBC C API逐字地翻译成Java API。例如,ODBC使用了大量的易于出错的指
针,而Java取消了这种不安全的指针。现在通过JDBC,把ODBC翻译成具有Java风格的面向对象
的接口。
(3)ODBC难以学习。ODBC把简单功能与高级功能混杂在一起,即便是简单的查询也会带来
复杂的任选项。而JDBC的设计使得简单的事情用简单的做法,仅在必要时才让用户使用高级
功能。
(4)JDBC的Java API提供"纯Java"的解决办法。当使用ODBC时,ODBC驱动器管理程序与驱
动器必须手工地装入到每架客户机上。而JDBC驱动器全部是用Java编写的,JDBC代码则在所
有Java平台(从网络计算机到主机)上都可自动安装,并且是可移植的和安全的。
总之,JDBC API是一种基于SQL的抽象与概念的Java接口,它是基于ODBC的。熟悉ODBC的
程序员很容易学习JDBC,JDBC保留了ODBC的基本设计功能。而且两种接口都是基于X/OpenSQ
L CLI(Call Level Interface)。最大的区别是JDBC保持了Java自身的风格与优点。最近,M
icrosoft引入了ODBC以外的新的API,包括RDO、ADO和OLE DB。其设计策略在许多方面与JDB
C类似,也是一种基于ODBC类的面向对象的数据库接口。4.在数据库存取的二层与三层模型上的应用
JDBC API支持数据库存取的二层与三层模型。在二层模型中,Java applet应用直
接与数据库对话,这要求JDBC驱动器能与所存取的特定的DBMS系统进行通信。用户的SQL语句
递交给数据库,其结果回送给用户。数据库可以存放在由网络连接的另一台机器上,这就是典
型的客户/服务器配置,用户机为客户,存放数据库的机器为服务器。网络可以是连接公司雇
员的Intranet, 也可以是Internet。
在三层模型中,把命令发送给模型的"中间层"(包括应用服务器和JDBC),然后中间
层再把SQL语句发送至数据库。数据库处理SQL语句,把结果回送给中间层,然后再送至用户。
MIS主管认为三层模型很适合他们的要求,可让中间层来支持对共同数据库的存取与特性控制
。中间层的另一个优点是,用户可以使用方便的高级API,由中间层把它翻译成某种低级调用
,而且在很多情形下,三层架构能提供更好的性能。
1.客户层——实现用户交互表示逻辑。该层与中间层的应用进行交互,不需要知道下层结构
或底层数据源函数的任何信息。
2.中间层包括:
应用——与客户层进行交互,实现商业逻辑。
应用服务器——对下层结构提供支持。包括管理和共享物理连接,事务管理,并屏蔽不同
JDBC驱动之间的差异。最后一点使得编写可移植的应用更容易。应用服务器的角色可以由
J2EE服务器来实现。应用服务器实现了应用所需的高层抽象,并与JDBC驱动器进行直接交互。
JDBC驱动器——提供了与低层数据源的连接。每个驱动器实现了不同数据源支持的任意SQL99
特性上的标准JDBC接口。驱动器层可以会屏蔽标准SQL99语法和数据源支持的本地语法之间的
差异。如果数据源不是一个关系DBMS,驱动器会实现一个应用服务器使用的关系层。
3.底层数据源——它可能包括关系DBMS,早期文件系统,面向对象DBMS,数据仓库,电子表格
或其他形式的数据。唯一的要求是要有一个支持JDBC接口的对应的驱动器。
到目前为止,中间层一直是用C或C++编写的,因此其性能较好。随着今后优化编译器的引
入,在能把Java字节代码翻译成高效的机器代码时,就可用Java来实现中间层。5.保证一致性的措施
结构化查询语言(SQL)是存取关系型数据库的标准语言。尽管多数DBMS系统在基本功能
都上采用SQL的标准形式,但在高级功能上它们并不遵循最新定义的标准SQL语法、语义。例
如,不是所有的数据库都支持存储过程或外部连接,这样就产生了不一致。JDBC API处理这个
问题的方法之一是允许将任何查询字符串传递给基础DBMS驱动器,这意味着应用可以自动地
使用尽可能多的SQL功能,但这会使某些DBMS系统接收到某种错误的查询。
JDBC处理SQL一致性问题的第二种方法是采用ODBC风格的例外条款,它提供了表示几种常
见的SQL差别的标准JDBC语法,例如,有表示日期文字与存储过程定义的例外条款。
对于复杂应用,JDBC提供了处理SQL一致性的第三种方法,那就是借助于DatabaseMetaD
ata接口,提供关于DBMS的描述性信息样,使应用能适应每个DBMS的需求与能力。
由于JDBC API是开发高级数据库存取工具与API的基础,所以它还必须涉及到它所构造的
数据库系统的一致性问题。为此它设置了可以让用户信赖的关于JDBC标准功能级的"JDBCCO
MPLIANT"标记。要拥有JDBC这一功能标记,驱动器必须至少支持ANSI SQL-2 EntryLevel。"
JDBC COMPLIANT"标记意味着:厂商的JDBC实现已通过了JavaSoft提供的一致性测试。这种一
致性测试检查是否存在JDBC API中定义的所有的类与方法,并尽可能检查所提供的SQL Entr
y Level功能。
随着JDBC被越来越多大数据库厂商、连接厂商、Internet服务厂商及应用程序编制者所
接受,JDBC将很快会成为Java数据库存取的标准。三、JDBC产品
当前已有一些可使用的基于JDBC的产品,还有一些正在开发的产品。
1.JavaSoft框架
如图3所示,JavaSoft提供了三种JDBC产品构件,并把它们作为JDK的组成部分:
·JDBC驱动器管理程序。
·JDBC驱动器测试集。
·JDBC_ODBJ桥接。
@@22107002.GIF;图3 Javasoft框架@@
JDBC驱动器管理程序是JDBC架构的支柱,它的主要功能是把Java应用连接到正确的JDBC
驱动器,然后离开。
JDBC驱动器测试集测试为使程序运行的JDBC驱动器的可信度。只有通过JDBC测试集的驱
动器才可以得到JDBC-COMPLIANT标记。
JDBC-ODBC桥接允许ODBC驱动器作为JDBC驱动器使用。这是使JDBC迅速投入使用的一种
现实方式。从长远考虑,它将用来存取非主流的DBMS系统。2.JDBC驱动器类型
到目前为止,有四种类型的JDBC驱动器:
(1)JDBC-ODBC桥接加上ODBC驱动器 JavaSoft的桥接产品提供了经过ODBC驱动器的
JDBC存取。注意,ODBC二进制代码及许多情形下的数据库客户代码,必须装入到使用此驱
动器的每个客户机上。
(2)本机API加上部分的Java驱动器 这类驱动器把JDBC调用转换为各种DBMS系统(O
racle、Sybase、Informix、DB2等)的客户API调用。注意,与桥接驱动器一样,这类的驱
动器需要在每架客户机上装入某种二进制代码。
(3)JDBC Net加上Java驱动器 这类驱动器把JDBC调用翻译成独立于DBMS的网络协议
,然后再由服务器翻译成DBMS协议。这种网络服务器中间件能将纯粹的Java客户程序连
接到许多不同的数据库。一般来说,这是最灵活的JDBC方案。
(4)本机协议加上Java驱动器 这类驱动器直接把JDBC调用转换为DBMS使用的网络协
议,这样可以由客户直接调用DBMS服务器,这是进行Intranet存取的一种切实可行的办法
。
我们预期,第3、4类驱动器将是JDBC存取数据库的优选方案,而第1、2类驱动器只是尚未
提供纯Java驱动器前的过渡性办法。第4类驱动器是理想方案,但少数情况下第3类驱动器
可能更好些3.流行的JDBC驱动器
当前有许多可与JavaSoft桥接产品一起使用的ODBC驱动器,即第1类驱动器。第2类驱动
器约有12个,它们是在DBMS的本机API基础是构造起来的。有几个第3类驱动器及2个以上的第
4类驱动器,估计到1997年底,所有主要的DBMS都将有第4类驱动器。4.其它产品
各种不同JDBC的应用开发工具正在开发中。JavaSoft与国际标准化组织试图将独立于D
BMS的网络需要标准化。如果这一设想能够实现,那么JavaSoft可能会将协议的"客户端"实
现与JDK绑在一起,而让不同厂商提供服务器端实现,如图4所示。
图4 客户端实现与服务器端分离的方案随机文章:
C++中的虚函数(virtual function) 2004-12-15sql server的安全登录和用户管理 2004-06-22SQL Server的索引管理 2004-06-18什么是句柄 2004-08-10一天成为朋友 2004-04-01
收藏到:Del.icio.us







