使用JDBC创建数据库对象(1)

发表于:2007-07-14来源:作者:点击数: 标签:
使用JDBC创建数据库对象(1) 本文分析了Java DataBase Connectivity (JDBC),一个在 Java 中以 面向对象 的方法来连接数据库的技术。它是对 ODBC API 进行的一种面向对象的封装和重新设计,它易于学习和使用,并且它能够使您编写不依赖供应商的代码,用以查
使用JDBC创建数据库对象(1)

本文分析了Java DataBase Connectivity (JDBC),一个在 Java 中以面向对象的方法来连接数据库的技术。它是对 ODBC API 进行的一种面向对象的封装和重新设计,它易于学习和使用,并且它能够使您编写不依赖供应商的代码,用以查询和操纵数据库。JDBC 提供了一些相当低层的方法来存取数据库,同时也在相当高层提供了功能强大的对象来处理数据库。

· 什么是数据库?

数据库 是以某种文件结构存储的一系列信息表,这种文件结构使您能够访问这些表、选择表中的列、对表进行排序以及根据各种标准选择行。数据库通常有多个 索引 与这些表中的许多列相关联,所以我们能尽可能快地访问这些表。

在进行计算时,数据库比其它类型的结构更常用。您会发现在员工记录和薪资系统中数据库处于核心地位,在旅行计划系统中以及在产品生产和销售的整个过程中都可以发现数据库。

以员工记录为例,您可以设想一个含有员工姓名、地址、工资、扣税以及津贴等内容的表。让我们考虑一下这些内容可能如何组织在一起。您可以设想一个表包含员工姓名、地址和电话号码。您希望保存的其它信息可能包括工资、工资范围、上次加薪时间、下次加薪时间、员工业绩评定等内容。

这些内容是否应保存在一个表格中?几乎可以肯定不应该如此。不同类别的员工的工资范围可能没有区别;这样,您可以仅将员工类型储存在员工记录表中,而将工资范围储存在另一个表中,通过类型编号与这个表关联。考虑以下情况:

Key Lastname SalaryType SalaryType Min Max
1 Adams 2 1 30000 45000
2 Johnson 1 2 45000 60000
3 Smyth 3 3 60000 75000
4 Tully 1
5 Wolff 2

SalaryType 列中的数据引用第二个表。我们可以想象出许多种这样的表,如用于存储居住城市和每个城市的税值、健康计划扣除金额等的表。每个表都有一个主键列(如上面两个表中最左边的列)和若干数据列。在数据库中建立表格既是一门艺术,也是一门科学。这些表的结构由它们的 范式 指出。我们通常说表属于第一、第二或第三范式,简称为1NF、2NF或3NF。

第一范式:表中的每个表元应该只有一个值(永远不可能是一个数组)。(1NF)

第二范式:满足1NF,并且每一个副键列完全依赖于主键列。这表示主键和该行中的剩余表元之间是1对1的关系。(2NF)

第三范式:满足2NF,并且所有副键列是互相独立的。任何一个数据列中包含的值都不能从其他列的数据计算得到。(3NF)

现在,几乎所有的数据库都是基于“第三范式(3NF)”创建的。这意味着通常都有相当多的表,每个表中的信息列都相对较少。

从数据库中获取数据

假设我们希望生成一个包含员工及其工资范围的表,在我们设计的一个练习中将使用这个表。这个表格不是直接存在在数据库中,但可以通过向数据库发出一个查询来构建它。我们希望得到如下所示的一个表:
Name Min Max
Adams $45,000.00 $60,000.00
Johnson $30,000.00 $45,000.00
Smyth $60,000.00 $75,000.00
Tully $30,000.00 $45,000.00
Wolff $45,000.00 $60,000.00

或者,按照工资递增的顺序排序

Name Min Max
Tully $30,000.00 $45,000.00
Johnson $30,000.00 $45,000.00
Wolff $45,000.00 $60,000.00
Adams $45,000.00 $60,000.00
Smyth $60,000.00 $75,000.00

我们发现,获得这些表的查询形式如下所示

CCCCCC"> SELECT DISTINCTROW Employees.Name, SalaryRanges.Min,
SalaryRanges.Max FROM Employees INNER JOIN SalaryRanges ON Employees.SalaryKey = SalaryRanges.SalaryKey
ORDER BY SalaryRanges.Min;
这种语言称为结构化查询语言,即 SQL (一般读作 "sequel" ),而且它是几乎目前所有数据库都可以使用的一种语言。这几年已颁布了若于 SQL 标准,而且大多数 PC 数据库支持大部分 ANSI 标准。 SQL-92 标准被认为是一种基础标准,而且已更新多次。然而,没有一种数据库可以完美地支持后来的 SQL 版本,而且大多数数据库都提供了多种 SQL 扩展,以支持他们数据库独有的性能

· 数据库的种类

由于 PC 已成为主要的办公工具,因此,已开发出在 PC 上的大量流行的数据库,这些数据库都是可以自管理的。它们包括初级数据库,如 MicrosoftWorks ,还包括更为复杂的数据库,如 Approach 、 dBase 、 Borland Paradox 、 Microsoft Aclearcase/" target="_blank" >ccess 和 FoxBase 。

另一类PC数据库包括那些可由许多PC客户机通过服务器访问的数据库。其中包括IBM DB/2、Microsoft SQL ServerOracle、Sybase、SQLBase和XDB。所有这些数据库产品都支持多种相对类似的SQL方言,因此,所有数据库最初看起来好象可以互换。当然,它们 不能 互换的原因是每种数据库都有不同的性能特征,而且每一种都有不同的用户界面和编程接口。您可能会想,既然它们都支持SQL,对它们进行的编程也应该相似,但这是绝对错误的,因为每种数据库都使用其自己方式接收SQL查询,并使用其自己的方式返回结果。这就自然引出了一种新一代的标准:ODBC

· ODBC

如果我们能够以某种方式编写不依赖于特定厂商的数据库的代码,并且能够不改变自己的调用程序即可从这些数据库中得到相同的结果,那将是一件很好的事。如果我们可以仅为所有这些数据库编写一些封装,使它们具有相似的编程接口,这种对数据库编程独立于供应商的特性将很容易实现。

Microsoft于1992年首先尝试了这一技巧,该公司发布了一个规范,称为对象数据库连接性。这被认为是在Windows环境下连接所有数据库的答案。与所有软件的第一个版本相同,它也经历了一些发展的困扰,在1994年推出了另一个版本,该版本运行速度更快,而且更为稳定。它也是第一个32位的版本。另外,ODBC开始向Windows之外的其它平台发展,到目前为止,它在PC和工作站领域已十分普遍。几乎每个主要的数据库厂商都提供ODBC驱动程序。

然而,ODBC并不是我们最初想象的灵丹妙药。许多数据库厂商都将ODBC作为其标准接口之外的“备选接口”,而且对ODBC的编程微不足道。与其它Windows编程一样,它包括句柄、指针和选项,使其难以掌握。最后一点,ODBC不是中立的标准。它由Microsoft公司开发,并由该公司不断改进,而微软同时也推出了我们所有人所使用的极具竞争性的软件平台,这使得ODBC的未来难以预测。

· 什么是JDBC?

JDBC 是一组首字母缩写,曾经代表 “Java DataBaseConnectivity” ,但现在它本身已成为一个商标符号。它是对 ODBC API 进行的一种面向对象的封装和重新设计,它易于学习和使用,并且它真正能够使您编写不依赖厂商的代码,用以查询和操纵数据库。尽管它与所有 Java API 一样,都是面向对象的,但它并不是很高级别的对象集,在本章的剩余部分,我们将提出更高级别的方法。

除Microsoft之外,多数厂商都采用了JDBC,并为其数据库提供了JDBC驱动程序;这使您可轻松地真正编写几乎完全不依赖数据库的代码。另外,JavaSoft和Intersolv已开发了一种称为JDBC-ODBCBridge的产品,可使您连接还没有直接的JDBC驱动程序的数据库。支持JDBC的所有数据库必须至少可以支持SQL-92标准。这在很大程度上实现了跨数据库和平台的可移植性。

(未完待续)

原文转自:http://www.ltesting.net