JDBC.docx

上传人:b****5 文档编号:8460408 上传时间:2023-01-31 格式:DOCX 页数:11 大小:28.26KB
下载 相关 举报
JDBC.docx_第1页
第1页 / 共11页
JDBC.docx_第2页
第2页 / 共11页
JDBC.docx_第3页
第3页 / 共11页
JDBC.docx_第4页
第4页 / 共11页
JDBC.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

JDBC.docx

《JDBC.docx》由会员分享,可在线阅读,更多相关《JDBC.docx(11页珍藏版)》请在冰豆网上搜索。

JDBC.docx

JDBC

JDBC接口技术介绍

JDBC是一种可用于执行SQL语句的JavaAPI(ApplicationProgrammingInterface应用程序设计接口)。

它由一些Java语言编写的类和界面组成。

JDBC为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。

一.ODBC到JDBC的发展历程

说到JDBC,很容易让人联想到另一个十分熟悉的字眼“ODBC”。

它们之间有没有联系呢?

如果有,那么它们之间又是怎样的关系呢?

ODBC是OpenDatabaseConnectivity的英文简写。

它是一种用来在相关或不相关的数据库管理系统(DBMS)中存取数据的,用C语言实现的,标准应用程序数据接口。

通过ODBCAPI,应用程序可以存取保存在多种不同数据库管理系统(DBMS)中的数据,而不论每个DBMS使用了何种数据存储格式和编程接口。

1、ODBC的结构模型

ODBC的结构包括四个主要部分:

应用程序接口、驱动器管理器、数据库驱动器和数据源。

应用程序接口:

屏蔽不同的ODBC数据库驱动器之间函数调用的差别,为用户提供统一的SQL编程接口。

驱动器管理器:

为应用程序装载数据库驱动器。

数据库驱动器:

实现ODBC的函数调用,提供对特定数据源的SQL请求。

如果需要,数据库驱动器将修改应用程序的请求,使得请求符合相关的DBMS所支持的文法。

数据源:

由用户想要存取的数据以及与它相关的操作系统、DBMS和用于访问DBMS的网络平台组成。

虽然ODBC驱动器管理器的主要目的是加载数据库驱动器,以便ODBC函数调用,但是数据库驱动器本身也执行ODBC函数调用,并与数据库相互配合。

因此当应用系统发出调用与数据源进行连接时,数据库驱动器能管理通信协议。

当建立起与数据源的连接时,数据库驱动器便能处理应用系统向DBMS发出的请求,对分析或发自数据源的设计进行必要的翻译,并将结果返回给应用系统。

2、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技术概述

JDBC是一种可用于执行SQL语句的JavaAPI(ApplicatinPrgrammingInterface,应用程序设计接口)。

它由一些Java语言写的类、界面组成。

JDBC给数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。

通过使用JDBC,开发人员可以很方便地将SQL语句传送给几乎任何一种数据库。

也就是说,开发人员可以不必写一个程序访问Sybase,写另一个程序访问Oracle,再写一个程序访问Microsoft的SQLServer。

用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统(DBMS)。

不但如此,使用Java编写的应用程序可以在任何支持Java的平台上运行,不必在不同的平台上编写不同的应用。

Java和JDBC的结合可以让开发人员在开发数据库应用时真正实现“WriteOnce,RunEverywhere!

”Java具有健壮、安全、易用等特性,而且支持自动网上下载,本质上是一种很好的数据库应用的编程语言。

它所需要的是Java应用如何同各种各样的数据库连接,JDBC正是实现这种连接的关键。

JDBC扩展了Java的能力,如使用Java和JDBCAPI就可以发布一个Web页,页中带有能访问远端数据库的Applet。

或者企业可以通过JDBC让全部的职工(他们可以使用不同的操作系统,如Windws,Machintsh和UNIX)在Intranet上连接到几个全球数据库上,而这几个全球数据库可以是不相同的。

随着越来越多的程序开发人员使用Java语言,对Java访问数据库易操作性的需求越来越强烈。

MIS管理人员喜欢Java和JDBC,因为这样可以更容易经济地公布信息。

各种已经安装在数据库中的事务处理都将继续正常运行,甚至这些事务处理是存储在不同的数据库管理系统中;而对新的数据库应用来说,开发时间将缩短,安装和版本升级将大大简化。

程序员可以编写或改写一个程序,然后将它放在服务器上,而每个用户都可以访问服务器得到最新的版本。

对于信息服务行业,Java和JDBC提供了一种很好的向外界用户更新信息的方法。

1、JDBC—一种底层的API

JDBC是一种底层API,这意味着它将直接调用SQL命令。

JDBC完全胜任这个任务,而且比其他数据库互联更加容易实现。

同时它也是构造高层API和数据库开发工具的基础。

高层API和数据库开发工具应该是用户界面更加友好,使用更加方便,更易于理解的。

但所有这样的API将最终被翻译为象JDBC这样的底层API。

目前两种基于JDBC的高层API正处在开发阶段。

1)SQL语言嵌入Java的预处理器。

虽然DBMS已经实现了SQL查询,但JDBC要求SQL语句被当作字符串参数传送给Java程序。

而嵌入式SQL预处理器允许程序员将SQL语句混用:

Java变量可以在SQL语句中使用,来接收或提供数值。

然后SQL的预处理器将把这种Java/SQL混用的程序翻译成带有JDBCAPI的Java程序。

2)实现从关系数据库到Java类的直接映射。

Javasoft和其他公司已经宣布要实现这一技术。

在这种“对象/关系”映射中,表的每一行都将变成这类的一个实例,每一列的值对应实例的一个属性。

程序员可以直接操作Java的对象;而存取所需要的SQL调用将在内部直接产生。

还可以实现更加复杂的映射,比如多张表的行在一个Java的类中实现。

随着大家对JDBC兴趣的不断浓厚,越来越多的开发人员已经开始利用JDBC为基础的工具进行开发。

这使开发工作变得容易。

同时,程序员也正在开发对最终用户来说访问数据库更加容易的应用程序。

2、JDBC和ODBC及其他API的比较

到目前为止,微软的ODBC可能是用得最广泛的访问关系数据库的API。

它提供了连接几乎任何一种平台、任何一种数据库的能力。

那么,为什么不直接从Java中直接使用ODBC呢?

回答是可以从Java中使用ODBC,但最好在JDBC的协助下,用JDBC-ODBC桥接器实现。

那么,为什么需要JDBC呢?

要回答这个问题,有这么几个方面:

1)ODBC并不适合在Java中直接使用。

ODBC是一个C语言实现的API,从Java程序调用本地的C程序会带来一系列类似安全性、完整性、健壮性的缺点。

2)完全精确地实现从C代码ODBC到JavaAPI写的ODBC的翻译也并不令人满意。

比如,Java没有指针,而ODBC中大量地使用了指针,包括极易出错的空指针“void*”。

因此,对Java程序员来说,把JDBC设想成将ODBC转换成面向对象的API是很自然的。

3)ODBC并不容易学习,它将简单特性和复杂特性混杂在一起,甚至对非常简单的查询都有复杂的选项。

而JDBC刚好相反,它保持了简单事物的简单性,但又允许复杂的特性。

4)JDBC这样的JavaAPI对于纯Java方案来说是必须的。

当使用ODBC时,人们必须在每一台客户机上安装ODBC驱动器和驱动管理器。

如果JDBC驱动器是完全用Java语言实现的话,那么JDBC的代码就可以自动的下载和安装,并保证其安全性,而且,这将适应任何Java平台,从网络计算机NC到大型主机Mainframe。

总而言之,JDBCAPI是能体现SQL最基本抽象概念的、最直接的Java接口。

它建构在ODBC的基础上,因此,熟悉ODBC的程序员将发现学习JDBC非常容易。

JDBC保持了ODBC的基本设计特征。

实际上,这两种接口都是基于X/OPENSQL的调用级接口(CLI)。

它们的最大的不同是JDBC是基于Java的风格和优点,并强化了Java的风格和优点。

最近,微软又推出了除了ODBC以外的新的API,如RDO,ADO和OLEDB。

这些API事实上在很多方面上同JDBC一样朝着相同的方向努力,也就是努力成为一个面向对象的,基于ODBC的类接口。

然而,这些接口目前并不能代替ODBC,尤其在ODBC驱动器已经在市场完全形成的时候,更重要的是它们只是ODBC的“漂亮的包装”。

3、JDBC的任务

简单地说,JDBC能完成下列三件事:

1)同数据库建立连接;

2)向数据库发送SQL语句;

3)处理数据库返回的结果。

4、JDBC两层模型和三层模型

JDBC支持两层模型,也支持三层模型访问数据库。

两层模型中,一个javaApplet或者一个JAVA应用直接同数据库连接。

这就需要能直接被访问的数据库进行连接的JDBC驱动器。

用户的SQL语句被传送给数据库,而这些语句执行的结果将被传回给用户。

数据库可以在同一机器上,也可以另一机器上通过网络进行连接。

这被称为“Client/Server”结构,用户的计算机作为Client,运行数据库的计算机作为Server。

这个网络可是intranet,比如连接全体雇员的企业内部网,当然也可以是internet。

在三层模型中,命令将被发送到服务的“中间层”,而“中间层”将SQL语句发送到数据库。

数据库处理SQL语句并将结果返回“中间层”,然后“中间层”将它们返回用户。

MIS管理员将发现三层模型很有吸引力,因为“中间层”可以进行对访问的控制并协同数据库的更新,另一个优势就是如果有一个“中间层”用户就可以使用一个易用的高层的API,这个API可以由“中间层”进行转换,转换成底层的调用。

而且,在许多情况下,三层模型可以提供更好的性能。

到目前为止,“中间层”通常还是用C或C++实现,以保证其高性能。

但随着优化编译器的引入,将java的字节码转换成高效的机器码,用java来实现“中间层”将越来越实际。

而JDBC是允许从一个java“中间层”访问数据库的关键。

三.JDBC框架

JavaSoft提供三种JDBC产品组件,它们是Java开发工具包(JDK)的组成部份:

JDBC驱动程序管理器,JDBC驱动程序测试工具包,和JDBC-ODBC桥。

JDBC驱动程序管理器是JDBC体系结构的支柱。

它实际上很小,也很简单;其主要作用是把Java应用程序连接到正确的JDBC驱动程序上,然后即退出。

JDBC驱动程序测试工具包为使JDBC驱动程序运行您的程序提供一定的可信度。

只有通过JDBC驱动程序测试包的驱动程序才被认为是符合JDBC标准TM的。

JDBC-ODBC桥使ODBC驱动程序可被用作JDBC驱动程序。

它的实现为JDBC的快速发展提供了一条途径,其长远目标提供一种访问某些不常见的DBMS(如果对这些不常见的DBMS未实现JDBC)的方法。

JDBC驱动程序的类型

我们目前所知晓的JDBC驱动程序可分为以下四个种类:

JDBC-ODBC桥加ODBC驱动程序:

JavaSoft桥产品利用ODBC驱动程序提供JDBC访问。

注意,必须将ODBC二进制代码(许多情况下还包括数据库客户机代码)加载到使用该驱动程序的每个客户机上。

因此,这种类型的驱动程序最适合于企业网(这种网络上客户机的安装不是主要问题),或者是用Java编写的三层结构的应用程序服务器代码。

本地API-部份用Java来编写的驱动程序:

这种类型的驱动程序把客户机API上的JDBC调用转换为Oracle、Sybase、Informix、DB2或其它DBMS的调用。

注意,象桥驱动程序一样,这种类型的驱动程序要求将某些二进制代码加载到每台客户机上。

JDBC网络纯Java驱动程序:

这种驱动程序将JDBC转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS协议。

这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上。

所用的具体协议取决于提供者。

通常,这是最为灵活的JDBC驱动程序。

有可能所有这种解决方案的提供者都提供适合于Intranet用的产品。

为了使这些产品也支持Internet访问,它们必须处理Web所提出的安全性、通过防火墙的访问等方面的额外要求。

几家提供者正将JDBC驱动程序加到他们现有的数据库中间件产品中。

本地协议纯Java驱动程序:

这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。

这将允许从客户机机器上直接调用DBMS服务器,是Intranet访问的一个很实用的解决方法。

由于许多这样的协议都是专用的,因此数据库提供者自己将是主要来源,有几家提供者已在着手做这件事了。

第3、4类驱动程序将成为从JDBC访问数据库的首选方法。

第1、2类驱动程序在直接的纯Java驱动程序还没有上市前将会作为过渡方案来使用。

对第1、2类驱动程序可能会有一些变种(下表中未列出),这些变种要求有连接器,但通常这些是更加不可取的解决方案。

第3、4类驱动程序提供了Java的所有优点,包括自动安装(例如,通过使用JDBC驱动程序的appletapplet来下载该驱动程序)。

下表显示了这4种类型的驱动程序及其属性:

驱动程序种类

纯JAVA?

网络协议

1-JDBC-OCBC桥

直接

2-基于本地API

直接

3-JDBC网络的

要求连接器

4-基于本地协议的

直接

四.连接

1、概述

  Cnnection对象代表与数据库的连接。

连接过程包括所执行的SQL语句和在该连接上所返回的结果。

一个应用程序可与单个数据库有一个或多个连接,或者可与许多数据库有连接。

2、打开连接

  与数据库建立连接的标准方法是调用DriverManager.getCnnection方法。

该方法接受含有某个URL的字符串。

DriverManager类(即所谓的JDBC管理层)将尝试找到可与那个URL所代表的数据库进行连接的驱动程序。

DriverManager类存有已注册的Driver类的清单。

当调用方法getCnnection时,它将检查清单中的每个驱动程序,直到找到可与URL中指定的数据库进行连接的驱动程序为止。

Driver的方法connect使用这个URL来建立实际的连接。

用户可绕过JDBC管理层直接调用Driver方法。

这在以下特殊情况下将很有用:

当两个驱动器可同时连接到数据库中,而用户需要明确地选用其中特定的驱动器。

但一般情况下,让DriverManager类处理打开连接这种事将更为简单。

下述代码显示如何打开一个与位于URL"jdbc:

odbc:

wmbat"的数据库的连接。

所用的用户标识符为"by",口令为"12Java":

Stringurl="jdbc:

dbc:

wmbat";

Connectioncn=DriverManager.getConnection(url,"by","12Java");

3、JDBCURL

  JDBCURL提供了一种标识数据库的方法,可以使相应的驱动程序能识别该数据库并与之建立连接。

实际上,驱动程序编程员将决定用什么JDBCURL来标识特定的驱动程序。

用户不必关心如何来形成JDBCURL;他们只须使用与所用的驱动程序一起提供的URL即可。

JDBC的作用是提供某些约定,驱动程序编程员在构造他们的JDBCURL时应该遵循这些约定。

由于JDBCURL要与各种不同的驱动程序一起使用,因此这些约定应非常灵活。

首先,它们应允许不同的驱动程序使用不同的方案来命名数据库。

例如,odbc子协议允许(但并不是要求)URL含有属性值。

第二,JDBCURL应允许驱动程序编程员将一切所需的信息编入其中。

这样就可以让要与给定数据库对话的applet打开数据库连接,而无须要求用户去做任何系统管理工作。

第三,JDBCURL应允许某种程度的间接性。

也就是说,JDBCURL可指向逻辑主机或数据库名,而这种逻辑主机或数据库名将由网络命名系统动态地转换为实际的名称。

这可以使系统管理员不必将特定主机声明为JDBC名称的一部份。

网络命名服务(例如DNS、NIS和DCE)有多种,而对于使用哪种命名服务并无限制。

JDBCURL的标准语法如下所示。

它由三部分组成,各部分间用冒号分隔:

jdbc:

:

JDBCURL的三个部分可分解如下:

jdbc─协议。

JDBCURL中的协议总是jdbc。

 ─驱动程序名或数据库连接机制(这种机制可由一个或多个驱动程序支持)的名称。

子协议名的典型示例是"odbc",该名称是为用于指定ODBC风格的数据资源名称的URL专门保留的。

例如,为了通过JDBC-ODBC桥来访问某个数据库,可以用如下所示的URL:

jdbc:

odbc:

fred本例中,子协议为"odbc",子名称"fred"是本地ODBC数据资源。

如果要用网络命名服务(这样JDBCURL中的数据库名称不必是实际名称),则命名服务可以作为子协议。

例如,可用如下所示的URL:

jdbc:

dcenaming:

accunts-payable

本例中,该URL指定了本地DCE命名服务应该将数据库名称accunts-payable"解析为更为具体的可用于连接真实数据库的名称。

一种标识数据库的方法。

子名称可以依不同的子协议而变化。

它还可以有子名称的子名称(含有驱动程序编程员所选的任何内部语法)。

使用子名称的目的是为定位数据库提供足够的信息。

前例中,因为ODBC将提供其余部份的信息,因此用"fred"就已足够。

然而,位于远程服务器上的数据库需要更多的信息。

例如,如果数据库是通过Internet来访问的,则在JDBCURL中应将网络地址作为子名称的一部份包括进去,且必须遵循如下所示的标准URL命名约定:

  //主机名:

端口/子协议,假设"dbnet"是个用于将某个主机连接到Internet上的协议,则JDBCURL类似:

jdbc:

dbnet:

//wombat:

356/fred

4、"odbc"子协议

  子协议odbc是一种特殊情况。

它是为用于指定ODBC风格的数据资源名称的URL而保留的,并具有下列特性:

允许在子名称(数据资源名称)后面指定任意多个属性值。

odbc子协议的完整语法为:

jdbc:

odbc:

[;=]*因此,以下都是合法的jdbc:

odbc名称:

jdbc:

odbc:

qer7

jdbc:

odbc:

wombat

jdbc:

odbc:

wombat;CacheSize=20;ExtensionCase=LOWER

jdbc:

odbc:

qeora;UID=kgh;PWD=foey

五.使用数据

JDBC提供了三个类,用于向数据库。

Connection接口中的三个方法可用于创建这些类的实例。

下面列出这些类及其创建方法:

  Statement─由方法createStatement所创建。

Statement对象用于发送简单的SQL语句。

  PreparedStatement─由方法prepareStatement所创建。

PreparedStatement对象用于发送带有一个或多个输入参数(IN参数)的SQL语句。

PreparedStatement拥有一组方法,用于设置IN参数的值。

执行语句时,这些IN参数将被送到数据库中。

PreparedStatement的实例扩展了Statement,因此它们都包括了Statement的方法。

PreparedStatement对象有可能比Statement对象的效率更高,因为它已被预编译过并存放在那以供将来使用。

  CallableStatement─由方法prepareCall所创建。

CallableStatement对象用于执行SQL储存程序。

CallableStatement对象从PreparedStatement中继承了用于处理IN参数的方法,而且还增加了用于处理OUT参数和INOUT参数的方法。

以下所列提供的方法可以快速决定应用哪个Connection方法来创建不同类型的SQL语句:

  createStatement方法用于:

简单的SQL语句(不带参数)

  prepareStatement方法用于:

带一个或多个IN参数的SQL语句经常被执行的简单SQL语句

prepareCall方法用于:

调用已储存过程

1、创建JDBCStatements对象

  Statement对象用于把SQL语句发送到DBMS。

你只须简单地创建一个Statement对象并且然后执行它,使用适当的方法执行你发送的SQL语句。

对SELECT语句来说,可以使用executeQuery。

要创建或修改表的语句,使用的方法是executeUpdate。

需要一个活跃的连接的来创建Statement对象的实例。

在下面的例子中,我们使用我们的Cnnectin对象cn创建Statement对象stmt:

Statementstmt=cn.createStatement();

 到此stmt已经存在了,但它还没有把SQL语句传递到DBMS。

我们需要提供SQL语句作为参数提供给我们使用的Statement的方法。

例如,在下面的代码段里,我们使用上面例子中的SQL语句作为executeUpdate的参数:

stmt.executeUpdate("CREATETABLECOFFEES"+"(COF_NAMEVARCHAR(32),SUP_IDINTEGER,PRICEFLOAT,"+"SALESINTEGER,TOTALINTEGER)");

  因为我们已经把SQL语句赋给了createTableCffees变量,我们可以如下方式书写代码:

stmt.executeUpdate(createTableCffees);执行语句

  我们使用executeUpdate方法是因为在createTableCffees中的SQL语句是DDL(数据定义语言)语句。

创建表,改变表,删除表都是DDL语句的例子,要用executeUpdate方法来执行。

你也可以从它的名字里看出,方法executeUpdate也被用于执行更新表SQL语句。

实际上,相对于创建表

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1