5. 附录
本文将介绍文档《Java 5 持久化实践》中所用工具的安装及基本使用方法。下文提供的信息基于 2007 年 5 月的版本,很快就会过时。届时,建议读者遵循类似但并非完全相同的步骤。 安装是在一台 Windows XP 专业版机器上进行的。
5.1. Java
我们将使用 Sun 提供的最新 Java 版本 [http://www.sun.com]。可通过以下网址下载:


从下载的文件开始安装 JDK。默认情况下,Java 安装在 [C:\Program Files\Java] 路径下:

5.2. Eclipse
5.2.1. 基本安装
Eclipse 是一款 IDE 软件,可在 [http://www.eclipse.org/] 网址获取,并可通过 [http://www.eclipse.org/downloads/] 网址下载。下面我们将下载 Eclipse 3.2.2:
![]()
下载完压缩包后,将其解压到硬盘中的某个文件夹:

接下来我们将上述 Eclipse 安装文件夹([C:\devjava\eclipse 3.2.2\eclipse])简称为 <eclipse>。[eclipse.exe] 是可执行文件,[eclipse.ini] 是其配置文件。让我们查看该配置文件的内容:
这些参数在启动Eclipse时按以下方式使用:
通过创建一个使用相同参数启动 Eclipse 的快捷方式,可以获得与使用 .ini 文件相同的结果。让我们详细说明这些参数:
- -vmargs:表示后续参数是针对将要运行 Eclipse 的 Java 虚拟机(JVM)的。Eclipse 是一个 Java 应用程序。
- -Xms40m:?
- -Xmx256m:将分配给运行 Eclipse 的 Java 虚拟机(JVM)的内存大小(以 MB 为单位)设置为 256 MB。如这里所示,默认大小为 256 MB。如果机器允许,建议使用 512 MB。
这些参数将传递给负责运行 Eclipse 的 JVM。JVM 由文件 [java.exe] 或 [javaw.exe] 表示。 该文件是如何被找到的?实际上,有多种查找方式:
- 在 OS 中的 PATH 内
- 在 <JAVA_HOME>/jre/bin 文件夹中,其中 JAVA_HOME 是一个系统变量,用于定义 JDK 的根目录。
- 将其设置为以 -vm <路径>\javaw.exe 形式作为参数传递给 Eclipse 的位置
后一种方案更为可取,因为前两种方案容易受到后续应用程序安装的影响,这些安装可能会更改 PATH 的路径,或者更改 OS 变量。
因此,我们创建以下快捷方式:

<eclipse>\eclipse.exe" -vm "C:\Program Files\Java\jre1.6.0_01\bin\javaw.exe" -vmargs -Xms40m -Xmx512m | |
Eclipse安装目录<eclipse> |
完成上述操作后,通过此快捷方式启动 Eclipse。此时会出现第一个对话框:

[workspace] 是一个工作区。接受系统提供的默认值即可。默认情况下,创建的 Eclipse 项目将保存在此对话框中指定的 <workspace> 文件夹内。不过可以绕过这一默认行为,这也是我们后续操作中将始终采用的方法。因此,在此对话框中作何选择并不重要。
完成此步骤后,将显示 Eclipse 开发环境:

我们将按照上述建议关闭视图 [Welcome]:

在创建 Java 项目之前,我们将配置 Eclipse,指定使用 JDK 来编译 Java 项目。为此,我们选择选项 [Window / Preferences / Java / Installed JREs ]:

通常,用于启动 Eclipse 本身的 JRE(Java 运行时环境)应出现在 JRE 列表中。 通常情况下,这将是唯一的条目。可以通过点击 [Add] 按钮添加 JRE。此时需要指定 JRE 的根目录。 而“[Search]”按钮则会在磁盘上搜索 JREs。这是了解当前安装状况的好方法,尤其是那些在升级到新版本时被遗忘而未卸载的 JREs。 上图中,被勾选的 JRE 将是用于编译和运行 Java 项目的组件。它就是在第 5.1 节中安装的,同时也用于启动 Eclipse。双击它即可访问其属性:

现在,让我们创建一个名为 [File / New / Project] 的 Java 项目:
![]() | ![]() |
选择 [Java Project],然后选择 [Next] ->

在 [2] 中,我们指定一个空文件夹,Java 项目将安装在此处。在 [1] 中,我们为项目命名。 项目名称不必与文件夹名称相同,尽管上例可能让人产生这种误解。完成上述操作后,点击按钮 [Next] 进入创建向导的下一页:

在上图中,我们在项目中创建一个专用文件夹,用于存储源文件(.java):

![]() |
- 在 [1] 中,我们可以看到文件夹 [src],其中将存放 .java 源文件
- 在 [2] 中,我们可以看到文件夹 [bin],编译后的 .class 文件将存放在此
最后,我们通过 [Finish] 完成向导。至此,我们已获得一个 Java 项目的骨架:

右键单击项目 [test1] 以创建一个 Java 类:

![]() |
- 在 [1] 中,即创建该类的文件夹。Eclipse 默认选择当前项目文件夹。
- 在 [2] 中,指定将放置该类的包
- 在 [3] 中,指定类名
- 在 [4] 中,我们要求生成静态方法 [main]
通过 [Finish] 确认向导。项目随即新增了一个类:

Eclipse 已生成该类的骨架。双击上方的 [Test1.java] 即可查看:

我们将上述代码修改如下:

我们运行程序 [Test1.java]:[clic droit sur Test1.java -> Run As -> Java Application]

执行结果显示在窗口 [Console] 中:

默认情况下应显示窗口 [Console]。若未显示,可通过 [Window/Show View/Console] 请求显示:

5.2.2. 编译器的选择
Eclipse 支持生成兼容 Java 1.4、Java 1.5 和 Java 1.6 的代码。默认情况下,它配置为生成兼容 Java 1.4 的代码。API 和 JPA 需要 Java 1.5 代码。 我们将 [Window / Preferences / Java / Compiler] 生成的代码类型更改为:
![]() |
- 更改为 [1]:选择 [Java / Compiler] 选项
- 为 [2]:选择 Java 5.0 兼容性
5.2.3. 安装 Callisto 版 插件
上述安装的基础版本可用于构建Java控制台应用程序,但无法构建Web或Swing类型的Java应用程序,或者必须完全自行开发。我们将安装各种插件:
操作步骤如下 [Help/Software Udates/Find and Install]:
![]() |
- 在 [2] 中,需指定安装新插件
![]() |
- 在 [3] 中,指定要搜索插件的网站
- 在 [4] 中,勾选所需的插件
![]() |
- 在 [5] 中,Eclipse 提示所选插件依赖于其他未被选中的插件
- 在 [6] 中,使用 [Select Required] 按钮自动选择缺失的插件
- 在 [7] 中,接受这些不同插件的许可条款
![]() |
- 在 [8] 中,显示即将安装的所有插件列表
- 在 [9] 步骤中,启动这些插件的下载
- 在 [10] 中,下载完成后,将不验证签名直接安装所有插件
![]() |
- 在 [11] 阶段,插件安装完成后,让 Eclipse 自动重启
- 在 [12] 中,若执行 [File/New/Project],会发现现在可以创建 Web 应用程序,而这在最初是无法实现的。
5.2.4. 安装插件 [TestNG]
TestNG(Next Generation测试版)是一款单元测试工具,其设计理念与JUnit相似。但它带来了一些改进,因此我们在此更倾向于使用它而非JUnit。 操作步骤与之前相同:[Help/Software Udates/Find and Install]:
![]() |
- 在 [2] 中,我们表示希望安装新的插件
![]() |
- 在 [3a] 中,[TestNG] 的下载网站不存在。我们将其添加为 [3b]
- 在 [4b] 中:该插件的网站是 [http://beust.com/eclipse]。在 [4a] 中,填写所需内容。
![]() |
- 在 [5a] 中,已选定插件 [TestNG] 进行更新。在 [5b] 中,我们启动了更新。
- 在 [6] 步骤中,已连接到插件网站。系统展示了网站上所有可用的插件。这里我们只选中一个,然后进入下一步。
![]() |
- 在 [7] 界面中,接受插件的许可条款
- 在 [8] 步骤中,显示了即将安装的所有插件列表,此处仅有一个。我们启动下载。随后,安装流程与上述针对 Callisto 插件的描述相同。
重启Eclipse后,可通过查看可用视图(例如[Window / show View / Other])来确认新插件已安装:
![]() |
如上所示,现在出现了一个此前不存在的视图 [TestNG]。
5.2.5. 安装 [Hibernate Tools] 插件
Hibernate 是一个 JPA 提供商,而 Eclipse 的 [Hibernate Tools] 插件在构建 JPA 应用程序时非常有用。 截至2007年5月,仅其最新版本(3.2.0beta9)支持与Hibernate/JPA协同工作,但该版本无法通过前述机制获取,仅旧版本可通过该途径获取。因此我们将采取不同的安装方式。
该插件可在Hibernate Tools网站上获取:http://tools.hibernate.org/。
![]() |
- 在 [1] 中,选择 Hibernate Tools 的最新版本
- 在 [2] 中,下载该版本
![]() |
- 在 [3] 中,使用解压工具将下载的 zip 文件解压到 <eclipse> 文件夹中(建议此时不要运行 Eclipse)
- 在 [4] 中,同意在操作过程中覆盖某些文件
重新启动Eclipse:
![]() |
- 在 [1] 中:打开一个视图
- 在 [2] 中:现在已存在一个 [Hibernate Console] 视图
我们不再继续使用 [Hibernate Tools] 插件(在 [2] 中点击“取消”)。其使用方法已在教程示例中说明。
有时Eclipse无法检测到新插件。可通过-clean选项强制其重新扫描所有插件。因此,Eclipse快捷方式的可执行文件将按以下方式修改:
"<eclipse>\eclipse.exe" -clean -vm "C:\Program Files\Java\jre1.6.0_01\bin\javaw.exe" -vmargs -Xms40m -Xmx512m
待 Eclipse 检测到新插件后,请移除上述 -clean 选项。
5.2.6. 安装 [SQL Explorer] 插件
接下来我们将安装一个插件,它能让我们直接在Eclipse中浏览数据库内容。Eclipse的可用插件可在[http://eclipse-plugins.2y.net/eclipse/plugins.jsp]网站上找到:
![]() |
- 在 [1]:Eclipse 插件网站
- 在 [2]:选择类别 [Database]
- 在 [3]:在 [Database] 类别中,选择按排名显示(鉴于投票人数较少,该排名不太可靠)
- 在 [4] 中:QuantumDB 位居第一
- 在 [5] 中:我们选择 SQLExplorer,虽然发布较早、排名较低(第3位),但表现依然出色。我们访问插件 [plugin-homepage] 的网站
![]() |
- 在 [6] 和 [7] 中:我们开始下载该插件。
![]() |
- 下载为 [8]:将插件的 zip 文件解压到 Eclipse 文件夹中。
为确认安装是否成功,请重新启动Eclipse,必要时可使用-clean选项:
![]() |
- 在 [1] 中:打开一个新的视图
- 在 [2] 中:可以看到 [SQL Explorer] 视图已可用。我们稍后会再讨论这一点。
5.3. Tomcat 5.5 Servlet 容器
5.3.1. 安装
要运行 Servlet,我们需要一个 Servlet 容器。 本文将介绍其中之一——Tomcat 5.5,其下载地址为 http://tomcat.apache.org/。我们将介绍其安装步骤(2007年5月)。如果系统中已安装了 Tomcat 的旧版本,建议先将其卸载。

要下载该产品,请点击上方的链接 [Tomcat 5.x]:

请选择适用于Windows平台的.exe文件。下载完成后,双击该文件启动Tomcat安装程序:

接受许可协议 ->

执行 [next] ->

接受建议的安装目录或使用 [Browse] 更改 ->

设置 Tomcat 服务器管理员的登录名/密码。此处已设置为 [admin / admin] ->
![]() |
Tomcat 5.x 需要 JRE 1.5 版本。它通常会自动识别您机器上已安装的版本。上文中指定的路径是指在第 5.1 节中下载的 JRE 1.6 版本。 如果未找到 JRE,请使用 [1] 按钮指定其安装目录。完成此操作后,请使用 [Install] 按钮安装 Tomcat 5.x ->

点击 [Finish] 按钮完成安装。Windows 任务栏右侧会出现图标,表示 Tomcat 已安装:

右键单击该图标可访问服务器的“启动”和“停止”命令:

我们使用选项 [Stop service] 立即停止 Web 服务器:

请注意图标状态的变化。该图标可从任务栏中移除:

Tomcat 已安装在用户指定的文件夹中,我们将其命名为 <tomcat>。下载的 Tomcat 5.5.23 版本的文件夹结构如下:

Tomcat 的安装在菜单中生成了若干快捷方式 [Démarrer]。我们使用下方的链接 [Monitor] 来启动 Tomcat 的停止/启动工具:

此时会看到之前展示的图标:

双击该图标即可启动 Tomcat 监控器:

通过“[Start - Stop - Pause] - Restart”按钮,我们可以启动、停止或重启服务器。我们通过“[Start]”启动服务器,随后使用浏览器访问网址 http://localhost:8080。此时应显示如下页面:

可通过以下链接验证 Tomcat 是否安装正确:

页面 [http://localhost:8080] 上的所有链接都值得关注,建议读者自行探索。我们稍后将重点介绍用于管理服务器中已部署 Web 应用程序的链接:

5.3.2. 在 Tomcat 服务器中部署 Web 应用程序
5.3.3. 部署
Web 应用程序必须遵循某些规则才能部署在 Servlet 容器中。假设 <webapp> 是 Web 应用程序的文件夹。一个 Web 应用程序由以下部分组成:
位于 <webapp>\WEB-INF\classes 文件夹中 | |
位于 <webapp>\WEB-INF\lib 文件夹中 | |
位于 <webapp> 文件夹或其子文件夹中 |
Web 应用程序通过文件 XML 进行配置:<webapp>\WEB-INF\web.xml。 在简单情况下,特别是当 Web 应用程序仅包含静态文件时,该文件并非必需。让我们构建以下 HTML 文件:
<html>
<head>
<title>Application exemple</title>
</head>
<body>
Application exemple active ....
</body>
</html>
并将它保存到一个文件夹中:

如果将该文件加载到浏览器中,会显示以下页面:

浏览器显示的URL表明,该页面并非由Web服务器提供,而是由浏览器直接加载的。现在,我们希望通过Tomcat Web服务器提供该页面。
让我们回到 <tomcat> 目录的文件结构:

在 Tomcat 服务器内部部署的 Web 应用程序配置,是通过放置在 [<tomcat>\conf\Catalina\localhost] 文件夹中的 XML 文件来实现的:
![]() | ![]() |
由于这些 XML 文件的结构简单,可以手动创建。但我们不采用这种方法,而是使用 Tomcat 提供的 Web 工具。
5.3.4. Tomcat的管理
在登录页面 http://localhost:8080 上,服务器提供了用于管理的链接:

链接 [Tomcat Administration] 允许我们配置 Tomcat 为其中部署的 Web 应用程序提供的资源,例如数据库连接池。点击该链接:

显示的页面提示我们,管理 Tomcat 5.x 需要一个名为“admin”的特定软件包。让我们返回 Tomcat 网站 [http://tomcat.apache.org/download-55.cgi]:

下载名为 [Administration Web Application] 的压缩包,然后将其解压。其内容如下:

文件夹 [admin] 应复制到 [<tomcat>\server\webapps] 中,其中 <tomcat> 是安装 Tomcat 的目录 5.x:

文件夹 [localhost] 包含一个名为 [admin.xml] 的文件,该文件需复制到 [<tomcat>\conf\Catalina\localhost] 中:

如果 Tomcat 正在运行,请先停止它,然后重新启动。接着使用浏览器重新访问 Web 服务器的登录页面:

点击链接 [Tomcat Administration]。我们会看到一个登录页面(为了打开该页面,可能需要“重新加载”页面):
![]() | ![]() |
在此处,需重新输入我们在安装 Tomcat 时提供的信息。在本例中,我们输入用户名 admin 和密码 admin。点击按钮 [Login] 将跳转至下一页面:

该页面允许 Tomcat 管理员配置
- 数据源(Data Sources),
- 发送邮件所需的必要信息(Mail Sessions),
- 所有应用程序均可访问的环境数据(Environment Entries),
- 管理 Tomcat 用户/管理员(Users),
- 管理用户组(Groups),
- 定义角色(即用户可执行或不可执行的操作),
- 定义由服务器部署的 Web 应用程序的特性(Catalina 服务)
请点击上面的链接 [Roles]:

角色用于定义用户或用户组可以做什么或不能做什么。 我们会将特定权限与角色关联。每个用户都关联有一个或多个角色,并拥有这些角色的权限。下方的角色 [manager] 赋予了管理部署在 Tomcat 中的 Web 应用程序的权限(部署、启动、停止、卸载)。 我们将创建一个名为 [manager] 的用户,并将其与角色 [manager] 关联,以便该用户能够管理 Tomcat 中的应用程序。为此,我们点击管理页面上的链接 [Users]:

我们可以看到已经存在若干用户。我们使用选项 [Create New User] 来创建新用户:

我们将用户 manager 的密码设为 manager,并为其分配 manager 角色。使用按钮 [Save] 确认此添加操作。新用户将出现在用户列表中:

该新用户将被添加到文件 [<tomcat>\conf\tomcat-users.xml] 中:

其内容如下:
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="manager" password="manager" fullName="" roles="manager"/>
<user username="admin" password="admin" roles="admin,manager"/>
</tomcat-users>
- 第 10 行:已创建的用户 [manager]
添加用户的另一种方法是直接修改此文件。如果万一忘记了管理员 admin 或 manager 的密码,就必须采用这种方法。
5.3.5. 已部署Web应用程序的管理
现在回到登录页面 [http://localhost:8080],并点击链接 [Tomcat Manager]:

随后将跳转至身份验证页面。我们使用用户名 manager / 密码 manager 进行登录,即 c.a.d。该用户对应我们刚刚创建的角色 [manager]。实际上,只有拥有此角色的用户才能使用该链接。 在 [tomcat-users.xml] 的第 11 行,我们可以看到用户 [admin] 同时也拥有角色 [manager]。因此,我们也可以使用 [admin / admin] 进行身份验证。

我们得到一个页面,列出了当前在 Tomcat 中部署的应用程序:

我们可以利用页面底部的表单添加一个新应用程序:

在此,我们希望将之前构建的示例应用程序部署到 Tomcat 中。操作步骤如下:

/example | 用于标识待部署Web应用程序的名称 的名称 | |
C:\data\工作\2006-2007\eclipse\dvp-jpa\附件\tomcat\示例 | Web 应用程序的文件夹 |
为了获取文件 [C:\data\travail\2006-2007\eclipse\dvp-jpa\annexes\tomcat\exemple\exemple.html],我们将向 Tomcat 请求 URL 和 [http://localhost:8080/exemple/exemple.html]。 上下文用于为已部署的Web应用程序树根命名。我们使用[Deploy]按钮来部署应用程序。如果一切顺利,我们将获得以下响应页面:

新应用程序将出现在已部署应用程序列表中:
![]() |
下面我们来分析上文中的 /example 上下文行:
链接至 http://localhost:8080/exemple | |
用于启动应用程序 | |
用于关闭应用程序 | |
用于重新加载应用程序。例如,当添加、 修改或删除应用程序中的某些类时,就需要执行此操作。 | |
删除上下文 [/exemple]。该应用程序将从 。 |
现在我们的 /example 应用程序已部署,我们可以进行一些测试。我们通过 URL [http://localhost:8080/exemple/vues/exemple.html] 请求页面 [exemple.html]:

在 Tomcat 服务器中部署 Web 应用程序的另一种方法是,将通过 Web 界面提供的信息写入名为 [contexte].xml 的文件中,并将其放置在 [<tomcat>\conf\Catalina\localhost] 文件夹内,其中 [contexte] 是 Web 应用程序的名称。
让我们回到 Tomcat 的管理界面:

删除应用程序 [/exemple] 及其链接 [Undeploy]:

应用程序 [/exemple] 已不再出现在活动应用程序列表中。现在,让我们定义以下文件 [exemple.xml]:
文件 XML 仅包含一个 <Context> 标签,其 docBase 属性定义了要部署的 Web 应用程序所在的文件夹。将此文件放置在 <tomcat>\conf\Catalina\localhost 中:

如有必要,请停止并重启 Tomcat,然后使用 Tomcat 管理器查看活动应用程序列表:

应用程序 [/exemple] 已成功运行。现在,我们使用浏览器访问以下网址:
[http://localhost:8080/exemple/exemple.html]:

这样部署的Web应用程序可以像之前一样,通过链接[Undeploy]从已部署应用程序列表中删除:

此时,文件 [exemple.xml] 将自动从文件夹 [<tomcat>\conf\Catalina\localhost] 中删除。
最后,若要在 Tomcat 中部署 Web 应用程序,还可以在文件 [<tomcat>\conf\server.xml] 中定义其上下文。此处不再赘述。
5.3.6. 带有主页的 Web 应用程序
当我们请求 URL [http://localhost:8080/exemple/] 时,会得到以下响应:

在某些较早版本的 Tomcat 中,此时会显示应用程序 [/exemple] 物理文件夹中的内容。
我们可以设置,当请求该上下文时,显示一个所谓的首页。 为此,我们创建一个名为 [web.xml] 的文件,并将其放置在 <example>\WEB-INF 文件夹中,其中 <example> 是 Web 应用程序 [/exemple] 的物理文件夹。该文件内容如下:
- 第 2-5 行: 根标签 <web-app>,其属性通过复制/粘贴自 Tomcat 应用程序 [/admin] 中的文件 [web.xml] 获得(路径为 <tomcat>/server/webapps/admin/WEB-INF/web.xml)。
- 第7行:Web应用程序的显示名称。这是一个自由命名的名称,其限制比应用程序的上下文名称要少。例如,其中可以包含空格,而上下文名称则不允许。该名称会显示在Tomcat管理员界面中,例如:

- 第 8 行:Web 应用程序的描述。该文本随后可通过编程方式获取。
- 第 9-11 行:欢迎文件列表。<welcome-file-list> 标签用于定义当客户端请求应用程序上下文时要呈现的视图列表。可能包含多个视图。 系统将向客户端呈现第一个找到的视图。此处我们只有一个视图:[/exemple.html]。因此,当客户端请求 URL [/exemple] 时,实际返回的将是 URL [/exemple/exemple.html]。
我们将文件 [web.xml] 保存到 <示例>\WEB-INF 目录中:

如果 Tomcat 仍在运行,可以使用链接 [Recharger] 强制其重新加载 Web 应用程序 [/exemple]:

在此次“重新加载”操作中,如果存在 [<exemple>\WEB-INF] 文件,Tomcat 将重新读取其中包含的 [web.xml] 文件。本例中即为这种情况。如果 Tomcat 已停止运行,请重新启动它。
使用浏览器访问 URL [http://localhost:8080/exemple/]:

欢迎文件的机制已正常运行。
5.3.7. 将 Tomcat 集成到 Eclipse
现在我们将把 Tomcat 集成到 Eclipse 中。此集成允许:
- 从Eclipse启动/停止Tomcat
- 开发 Java Web 应用程序并在 Tomcat 上运行。Eclipse 与 Tomcat 的集成支持对应用程序的运行进行跟踪(调试),包括由 Tomcat 执行的 Java 类(Servlet)的运行。
启动 Eclipse,然后打开视图 [Servers]:
![]() |
- 在 [1] 中:Window/Show View/Other
- 在 [2] 中:选择视图 [Servers] 并执行 [OK]
![]() |
- 在 [1] 中,出现了一个新视图 [Servers]
- 在 [2] 中,右键单击视图并要求创建新服务器 [New/Server]
- 在 [3] 中,选择服务器 [Tomcat 5.5],然后生成 [Next]
![]() |
- ,将其更名为 [4],指定 Tomcat 5.5 的安装目录
- 在 [5] 中,指出目前尚无 Eclipse/Tomcat 项目。执行 [Finish]
添加服务器后,Eclipse项目资源管理器中会出现一个文件夹([6]),并在视图中显示一个服务器([servers] [7]):
![]() |
在视图 [Servers] 中会显示所有已声明的服务器,此处仅显示我们刚刚注册的 Tomcat 5.5 服务器。右键单击该服务器即可访问用于启动、停止和重启服务器的命令:

上文中,我们启动了服务器。在启动过程中,一些日志会被写入视图 [Console]:
解读这些日志需要一定的经验。目前我们暂不深入探讨。但重要的是要确认这些日志中是否报告了上下文加载错误。 实际上,当 Tomcat / Eclipse 服务器启动时,它会尝试加载其管理的应用程序上下文。加载应用程序上下文意味着需要读取其 [web.xml] 文件,并加载一个或多个用于初始化该上下文的类。此时可能发生多种类型的错误:
- [web.xml] 文件的语法错误。这是最常见的错误。建议在构建 XML 文档时,使用能够验证其有效性的工具。
- 某些待加载的类未被找到。系统会在 [WEB-INF/classes] 和 [WEB-INF/lib] 中搜索这些类。通常需要检查 [web.xml] 文件中是否存在必要的类,并核对其中声明的类名称拼写是否正确。
从Eclipse启动的服务器配置与第5.3节中安装的服务器不同。为确认这一点,请使用浏览器访问URL [http://localhost:8080]:

该响应并非表明服务器无法运行,而是表示所请求的 / 资源不可用。对于集成在 Eclipse 中的 Tomcat 服务器,这些资源将对应 Web 项目。我们稍后会看到这一点。目前,先停止 Tomcat:

上述运行模式可以进行更改。返回视图 [Servers],双击 Tomcat 服务器以访问其属性:
![]() | ![]() |
复选框 [1] 负责上述运行模式。当其被选中时,在 Eclipse 中开发的 Web 应用程序不会在关联的 Tomcat 服务器配置文件中声明,而是声明在单独的配置文件中。 这样一来,就无法使用 Tomcat 服务器中默认定义的两个实用应用程序:[admin] 和 [manager]。因此,我们将取消勾选 [1] 并重启 Tomcat:
![]() | ![]() |
完成上述操作后,请使用浏览器访问 URL [http://localhost:8080]:

我们观察到与第 5.3.4 节中描述的运行情况一致。
在之前的示例中,我们使用了Eclipse外部的浏览器。也可以使用Eclipse内部的浏览器:

上图中,我们选择了内置浏览器。若要从 Eclipse 启动它,可以使用以下图标:

实际启动的浏览器将由选项 [Window -> Web Browser] 所选定。在此,我们启动的是内置浏览器:

如有需要,请从Eclipse中启动Tomcat,并在[1]中请求URL [http://localhost:8080]:

点击链接 [Tomcat Manager]:

系统要求提供访问应用程序 [manager] 所需的 [login / mot de passe] 配对。根据我们之前对 Tomcat 的配置,可以输入 [admin / admin] 或 [manager / manager]。 随后将显示已部署的应用程序列表:

5.4. SGBD Firebird
5.4.1. SGBD Firebird
SGBD Firebird 可在 [http://www.firebirdsql.org/] 的 URL 上获取:
![]() |
- 在 [1] 中:使用选项 [Download.Firebird Relational Database]
- 在 [2] 中:指定所需的 Firebird 版本
- 在 [3] 中:下载安装二进制文件
下载 [3] 文件后,双击该文件即可安装 Firebird。SGBD 安装在以下内容的文件夹中:

二进制文件位于 [bin] 文件夹中:

用于启动/停止 SGBD | |
用于管理数据库的命令行客户端 |
请注意,默认情况下,SGBD的管理员名为[SYSDBA],密码为[masterkey]。[Démarrer]中已安装以下菜单:

选项 [Firebird Guardian] 可用于启动/停止 SGBD。启动后,SGBD 的图标会保留在 Windows 任务栏中:
![]() |
若要使用命令行客户端 [isql.exe] 创建和操作 Firebird 数据库,请务必阅读随产品附带的文档,该文档可通过 [Démarrer/Programmes/Firebird 2.0] 中的 Firebird 快捷方式访问。
使用图形化客户端是快速操作 Firebird 并学习 SQL 语言的一种便捷方式。下文将介绍此类客户端——IB-Expert。
5.4.2. 使用 IB- Expert 操作 Firebird
IB-Expert 的官方网站是 [http://www.ibexpert.com/]。
![]() |
![]() |
- 在 [1] 中,选择 IBExpert
- 在 [2] 页面,可先选择所需语言,随后点击下载
- 在 [3] 中,选择所谓的“个人版”,因为它是免费的。不过需要在网站上注册。
- 在 [4] 中,下载 IBExpert
IBExpert 安装在类似于以下结构的文件夹中:

该可执行文件名为 [ibexpert.exe]。通常在 [Démarrer] 菜单中会有一个快捷方式:

启动后,IBExpert 将显示以下窗口:

使用选项 [Database/Create Database] 来创建数据库:

可能是 [local] 或 [remote]。这里我们的服务器与 [IBExpert] 位于同一台机器上。我们选择 因此选择 [local] | |
使用下拉列表中类似 [dossier] 的按钮来指定数据库文件。Firebird 会将整个 数据库存入一个文件中。这是它的优势之一。 只需复制该文件,即可将数据库从一台计算机转移到另一台。 系统会自动添加后缀 [.fdb]。 | |
SYSDBA 是当前 Firebird 发行版的默认管理员 | |
masterkey 是当前 Firebird 发行版的 SYSDBA 管理员密码 当前 Firebird 发行版的 | |
应使用的方言为 SQL | |
如果勾选了此复选框,IBExpert将在创建数据库后显示指向该数据库的链接 |
如果点击创建按钮 [OK] 后,您会收到以下警告:

说明您尚未启动 Firebird。请启动它。此时会弹出一个新窗口:

要使用的字符集。建议从下拉列表中选择 [ISO-8859-1],该字体支持带重音的拉丁字符。 |
[IBExpert] 能够处理各种源自 Interbase 的 SGBD。 请选用您已安装的 Firebird 版本。 |
一旦 [Register] 确认了此新窗口,[1] 结果就会出现在 [Database Explorer] 窗口中。该窗口可能会被意外关闭。要重新打开它,请执行 [2]:
![]() |
要访问创建的数据库,只需双击其链接。此时 IBExpert 将显示一个树形结构,用于访问数据库的属性:

5.4.3. 创建数据表
创建一个表。右键单击 [Tables](参见上图),然后选择 [New Table] 选项。此时将显示表属性定义窗口:
![]() |
首先,通过输入框 [1] 将表命名为 [ARTICLES]:

使用输入框 [2] 定义主键 [ID]:

双击字段的 [PK](主键)区域,即可将该字段设为主键。使用位于 [3] 上方的按钮添加字段:

在“编译”定义之前,表不会被创建。 使用上方的 [Compile] 按钮来完成表的定义。IBExpert 会准备生成表的 SQL 查询,并请求确认:

有趣的是,IBExpert 会显示其已执行的 SQL 查询。 这既有助于学习 SQL 语言,也有助于了解可能使用的专有方言 SQL。 [Commit] 按钮用于确认当前事务,[Rollback] 按钮用于取消当前事务。 此处通过 [Commit] 进行确认。操作完成后,IBExpert 将创建的表添加到数据库的结构树中:

双击该表即可查看其属性:

通过面板 [Constraints],我们可以为该表添加新的完整性约束。让我们打开它:

我们可以看到之前创建的主键约束。还可以添加其他约束:
- 外键 [Foreign Keys]
- 字段完整性约束 [Checks]
- 字段唯一性约束 [Uniques]
请注意:
- 字段 [ID, PRIX, STOCKACTUEL, STOKMINIMUM] 的值必须大于 0
- 字段 [NOM] 必须不为空且唯一
打开[Checks]面板,在约束定义区域中右键单击以添加新约束:

定义所需的约束条件:

请注意,上文中的约束 [NOM<>''] 使用的是两个单引号,而非双引号。点击上方的 [Compile] 按钮编译这些约束:

同样,IBExpert 通过列出其已执行的 SQL 查询,展现了其教学功能。 现在我们转向 [Constraints/Uniques] 面板,说明名称必须是唯一的。这意味着表中不能出现两次相同的名称。

定义约束:

然后编译它。完成后,打开表 [ARTICLES] 的面板 [DDL](数据定义语言):

该面板会生成包含所有约束条件的表生成代码 SQL。我们可以将此代码保存到脚本中,以便日后重新执行:
SET SQL DIALECT 3;
SET NAMES ISO8859_1;
CREATE TABLE ARTICLES (
ID INTEGER NOT NULL,
NOM VARCHAR(20) NOT NULL,
PRIX DOUBLE PRECISION NOT NULL,
STOCKACTUEL INTEGER NOT NULL,
STOCKMINIMUM INTEGER NOT NULL
);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_ID check (ID>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_PRIX check (PRIX>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKACTUEL check (STOCKACTUEL>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKMINIMUM check (STOCKMINIMUM>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_NOM check (NOM<>'');
ALTER TABLE ARTICLES ADD CONSTRAINT UNQ_NOM UNIQUE (NOM);
ALTER TABLE ARTICLES ADD CONSTRAINT PK_ARTICLES PRIMARY KEY (ID);
5.4.4. 向表中插入数据
现在是时候向表 [ARTICLES] 中插入数据了。为此,请使用其面板 [Data]:

通过双击表格中每行对应的输入字段即可输入数据。 点击按钮 [+] 可添加新行,点击按钮 [-] 可删除行。这些操作均在事务中进行,需通过按钮 [Commit Transaction] 进行提交(参见上文)。若未进行提交,数据将丢失。
5.4.5. [IB-Expert] 的编辑器 SQL
SQL 语言(结构化查询语言)允许用户:
- 创建表,并指定其将存储的数据类型以及数据必须满足的约束条件
- 向表中插入数据
- 修改部分数据
- 删除部分数据
- 利用表中的内容获取信息
- ……
IBExpert允许用户以图形化方式执行操作1至4。我们刚才已经看到了这一点。当数据库包含许多表,且每张表都有数百行数据时,我们需要一些难以通过视觉获取的信息。例如,假设一个网络虚拟商店每月有数千名买家。 所有购买记录都存储在数据库中。六个月后,发现产品“X”存在质量问题。希望联系所有购买该产品的顾客,请他们将产品寄回进行免费更换。如何查找这些顾客的地址?
- 我们可以手动查看所有数据表并逐一查找这些买家,但这将耗费数小时。
- 也可以执行一条名为 SQL 的命令,该命令将在几秒钟内生成这些人的名单
只要表中的数据量较大,SQL 语言就非常有用
- 当表中的数据量较大时
- 当存在大量相互关联的表时
- 需要获取的信息分散在多个表中
- ...
现在我们介绍 IBExpert 中的 SQL 编辑器。可通过选项 [Tools/SQL Editor] 或 [F12] 访问该编辑器:

此时,我们将进入一个功能强大的 SQL 查询编辑器,可以在其中进行查询操作。输入一个查询:

点击上方的 [Execute] 按钮执行 SQL 查询。结果如下:

上图中,[Results] 选项卡显示了 SQL 和 [Select] 命令的结果表。 若要发出新的命令 SQL,只需返回 [Edit] 选项卡。此时将显示已执行的命令 SQL。

工具栏上有几个有用的按钮:
- [New Query] 按钮可切换至新的查询 SQL:

此时将显示一个空白编辑页面:

此时可以输入新的订单 SQL:

并执行该订单:

回到 [Edit] 选项卡。已发出的各个 SQL 指令由 [IBExpert] 进行存储。 通过按钮 [Previous Query],可以返回先前生成的 SQL 指令:

此时将返回上一个请求:

按钮 [Next Query] 则用于跳转至下一个订单 SQL:

随后,在已保存的 SQL 订单列表中,我们找到了紧随其后的 SQL 订单:

点击按钮 [Delete Query] 可从已保存的订单列表中删除订单 SQL:

按钮 [Clear Current Query] 可清除所显示的订单 SQL 的编辑器内容:

按钮 [Commit] 用于最终确认对数据库所做的修改:

按钮 [RollBack] 可撤销自上次执行 [Commit] 以来对数据库所做的修改。如果自连接数据库以来未执行过 [Commit],则将撤销自本次连接以来所做的修改。

举个例子。在表中插入一行:

SQL命令已执行,但未显示任何结果。无法确定插入操作是否成功。为确认这一点,请在执行[New Query]之后,执行以下SQL命令:

结果如下:

因此,该行已成功插入。现在让我们通过另一种方式查看表的内容。在数据库浏览器中双击表 [ARTICLES]:

我们得到如下表:

上方的箭头按钮可用于刷新表格。刷新后,上方的表格并未发生变化。看起来新行似乎并未被插入。 返回编辑器 SQL(F12),然后通过按钮 [Commit] 确认生成的任务 SQL:

完成上述操作后,让我们回到表 [ARTICLES]。我们可以发现,即使使用按钮 [Refresh],情况也没有任何变化:

在上方,打开 [Fields] 选项卡,然后返回 [Data] 选项卡。这次插入的行显示正确:

当开始执行各种 SQL 命令时,编辑器会在数据库上打开一个所谓的“事务”。 编辑器SQL通过这些命令SQL所做的修改,仅在保持在同一编辑器SQL内时可见(可以同时打开多个编辑器)。 这就像编辑器 SQL 并非在实际数据库上操作,而是在其自身的副本上操作。实际上,情况并非完全如此,但这个比喻有助于我们理解事务的概念。 在事务期间对副本所做的所有修改,只有在通过 [Commit Transaction] 确认后,才会显示在实际数据库中。此时当前事务结束,并开始一个新事务。
交易过程中所做的修改可以通过名为 [Rollback] 的操作撤销。让我们进行以下实验。先启动一个新交易(只需在当前交易中执行 [Commit] 即可),并使用以下 SQL 命令:

执行该命令以删除表 [ARTICLES] 中的所有行,然后执行 [New Query] 并输入以下新命令 SQL:

我们得到以下结果:

所有行均已被删除。请注意,此操作是在表 [ARTICLES] 的副本上执行的。为验证这一点,请双击下方的表 [ARTICLES]:

并查看 [Data] 选项卡:

即使使用按钮 [Refresh],或切换到标签页 [Fields] 后再返回标签页 [Data],上述内容也不会发生变化。这一点已经解释过了。 我们当前处于另一个事务中,该事务正在处理其自身的副本。现在让我们回到编辑器 SQL(F12),并使用按钮 [RollBack] 来撤销之前执行的行删除操作:

系统要求我们确认:

确认。编辑器 SQL 确认更改已撤销:

重新执行上述请求 SQL 以进行验证。被删除的行已恢复:

操作 [Rollback] 将编辑器 SQL 正在处理的副本恢复到了事务开始时的状态。
5.4.6. 将 Firebird 数据库导出到 SQL 脚本
当处理多个 SGBD 时(如教程《Java 5 持久化实战》中所示), 能够将数据库从 SGBD 1 导出到 SQL 脚本,然后将该脚本导入到 SGBD 2 中,这非常有价值。这样可以避免许多手动操作。 但这并非总是可行,因为 SGBD 文件通常带有专有扩展名 SQL。
下面演示如何将前一个 [dbarticles] 数据库导出到 SQL 脚本中:
![]() |
- 到 [1]:工具 / 提取 MetaData,以提取元数据
- 在 [2] 中:元数据对象选项卡
- 在 [3] 中:选择要提取结构(元数据)的表 [Articles]
- 在 [4] 中:将左侧选中的对象移至右侧
![]() |
- 在 [5] 中:表 [ARTICLES] 将包含在提取的元数据中
- 在 [6] 中:[Table de données] 选项卡用于选择需要提取内容的表(在上一步中,导出的是表结构)
- 在 [7] 中:用于将左侧选中的对象向右移动
- 在 [8] 中:所得结果
![]() |
- 在 [9] 中:[Options] 选项卡用于配置提取的某些参数
- 在 [10] 中:取消勾选与生成 SQL 命令相关的选项,该命令用于连接数据库。这些命令属于 Firebird 专有,因此我们不感兴趣。
- 在 [11] 中:[Sortie] 选项卡用于指定脚本的生成位置 SQL
- 在 [12] 中:指定脚本应生成在
- 在 [13] 中:指定该文件的位置
- 在 [14] 中:启动 SQL 脚本的生成
生成的脚本(已删除注释)如下:
注:第 1-2 行是 Firebird 特有的。必须从生成的脚本中删除这些行,才能获得通用的 SQL。
5.4.7. Firebird的 驱动程序JDBC
一个 Java 程序通过专用于 SGBD 的 JDBC 驱动程序访问数据库数据:
![]() |
在如上所述的多层架构中,JDBC [1] 驱动程序由 [dao] 层(数据访问对象)使用,以访问数据库中的数据。
Firebird 的 JDBC 驱动程序可在下载 Firebird 的网址处获取:
![]() |
![]() |
- 在 [1] 中:选择下载驱动程序 JDBC
- 在 [2] 中:选择兼容 JDK 1.5 版本的驱动程序 JDBC
- 在 [3] 中:包含驱动程序 JDBC 的压缩包是 [jaybird-full-2.1.1.jar]。我们将解压该文件。它将用于所有使用 Firebird 的 JPA 示例。
我们将它放置在一个文件夹中,该文件夹后续将命名为 <jdbc>:

为了验证该驱动程序 JDBC,我们将使用 Eclipse 以及 SQL Explorer 插件(参见第 5.2.6 节)。首先声明 Firebird 的驱动程序 JDBC:
![]() |
- 在 [1] 中:执行“窗口 / 首选项”
- 在 [2] 中:选择 SQL Explorer / JDBC Drivers 选项
- 在 [3] 中:选择适用于 Firebird 的驱动程序 JDBC
- 在 [4] 中:进入配置阶段
- 在 [5] 中:切换至 [Extra Class Path] 选项卡
- 在 [6] 中,指定驱动程序文件 JDBC。完成此操作后,该文件将显示在 [7] 中。此处应选择先前放置在 <jdbc> 文件夹中的驱动程序
- 中的驱动程序:[8] 表示驱动程序的 Java 类名 JDBC。可通过 [8b] 按钮获取该类名。
- 执行 [OK] 以确认配置
![]() |
- 在 [9] 中:Firebird 的 JDBC 驱动程序现已配置完成。可以开始使用它。
![]() |
- 转换为 [1]:打开一个新的视图
- 转换为 [2]:选择视图 [SQL Explorer]
![]() |
- 在 [3] 中:创建新连接
- 在 [4] 中:为其命名
- 在 [5] 中:从下拉列表中选择 Firebird 的驱动程序 JDBC
- 在 [6] 中:指定要连接的数据库 URL,此处为:[jdbc:firebirdsql:localhost/3050:C:\data\2006-2007\eclipse\dvp-jpa\annexes\jpa\jpa.fdb]。[jpa.fdb] 是之前使用 IBExpert 创建的数据库。
- 在 [7] 中:连接的用户名,此处为 [sysdba],即 Firebird 管理员
- 在 [8] 中:其密码为 [masterkey]
- 通过 [OK] 验证连接配置
![]() |
- 在 [1] 中:双击要打开的连接名称
- 在 [2] 中:进行身份验证(sysdba, masterkey)
- 在 [3] 中:连接已建立
- 在 [4] 中:显示数据库结构。可见表 [ARTICLES]。选中该表。
![]() |
- 在 [5] 中:[Database Detail] 窗口显示 [4] 中所选对象的详细信息,此处为表 [ARTICLES]
- 在 [6] 中:[Columns] 选项卡显示了该表的结构
- 在 [7] 中:[Preview] 选项卡显示了表的结构
可在窗口 [SQL Editor] 中执行查询 SQL:
![]() |
- 在 [1] 中:选择一个已打开的连接
- 在 [2] 中:输入要执行的 SQL 命令
- 在 [3] 中:执行该命令
- 在 [4] 中:显示已执行命令的摘要
- 在 [5] 中:显示其结果
5.5. SGBD MySQL5
5.5.1. 安装
SGBD MySQL5 可在以下网址获取 [http://dev.mysql.com/downloads/]:
![]() |
- 在 [1] 中:选择所需版本
- 在 [2] 中:选择 Windows 版本
![]() |
- 在 [3]:选择所需的 Windows 版本
- 在 [4] 中:下载的 zip 文件包含一个可执行文件 [Setup.exe] [4b],需要将其解压并运行以安装 MySQL5
![]() |
- 为 [5]:选择“典型安装”
- 安装为 [6]:安装完成后,可以配置服务器 MySQL5
![]() |
- 在 [7] 中:选择标准配置,即提问最少的配置
- 在 [8] 中:MySQL5 服务器将作为 Windows 服务运行
![]() |
- 在 [9] 中:默认情况下,服务器管理员为 root,且无密码。可以保留此配置,也可以为 root 设置新密码。如果 MySQL5 的安装是在卸载旧版本之后进行的,此操作可能会失败。此时恢复的可能性较小。
- 在 [10] 中:需要配置服务器
安装 MySQL5 会在 [Démarrer / Programmes ] 中生成一个文件夹:

可使用 [MySQL Server Instance Config Wizard] 重新配置服务器:
![]() |
![]() |
![]() |
- 为 [3]:我们更改 root 用户的密码(此处为 root/root)
5.5.2. 启动/停止 MySQL5
服务器 MySQL5 已作为 Windows 自动启动服务安装,c.a.d 会在 Windows 启动时立即运行。这种运行模式不太方便。我们将进行更改:
[Démarrer / Panneau de configuration / Performances et maintenance / Outils d'administration / Services ]:
![]() |
- 为 [1]:双击 [Services]
- 改为 [2]:可以看到存在一个名为 [MySQL] 的服务,其启动名称为 [3],且启动类型为自动 [4]。
若要修改此设置,请双击服务 [MySQL]:
![]() |
- 为 [1]:将该服务设置为手动启动
- 在 [2]:将其停止
- 在 [3] 上:确认服务的新配置
要手动启动和停止服务 MySQL,可以创建两个快捷方式:
![]() |
- [1]:用于启动 MySQL5 的快捷方式
- [2]:用于停止该服务的快捷方式
5.5.3. MySQL 管理客户端
在 MySQL 网站上,可以找到 SGBD 的管理客户端:
![]() |
- 在 [1] 中:选择 [MySQL GUI Tools],该版本汇集了多种图形客户端,既可用于管理 SGBD,也可用于运行
- 在 [2] 中:选择合适的 Windows 版本
![]() |
- 在 [3] 中:获取一个待执行的 .msi 文件
- 转换为 [4]:安装完成后,[Menu Démarrer / Programmes / mySQL] 文件夹中会出现新的快捷方式。
请通过您创建的快捷方式运行 MySQL,然后通过上方菜单运行 [MySQL Administrator]:
![]() |
- 在 [1] 中:输入 root 用户的密码(此处为 root)
- 在 [2] 中:已登录,且可见 MySQL 处于活动状态
5.5.4. 创建用户 jpa 和数据库 jpa
本教程使用 MySQL5,其中包含一个名为 jpa 的数据库和同名用户。现在我们来创建它们。首先是用户:
![]() |
- 在 [1] 中:选择 [User Administration]
- 在 [2] 中:在 [User accounts] 部分右键单击以创建新用户
- 在 [3] 中:用户名为 jpa,密码为 jpa
- 在 [4] 中:确认创建
- 在 [5] 中:用户 [jpa] 出现在窗口 [User Accounts] 中
现在查看数据库:
![]() |
- 在 [1] 中:选择选项 [Catalogs]
- 在 [2] 中:右键单击窗口 [Schemata] 以创建新模式(指定一个数据库)
- 在 [3] 中:为新模式命名
- 在 [4]:该模式出现在 [Schemata] 窗口中
![]() |
- 在 [5] 中:选择模式 [jpa]
- 在 [6] 中:将显示 [jpa] 模式的对象,特别是表。目前尚无表。右键单击即可创建。此操作留给读者自行完成。
现在回到用户 [jpa],为其授予模式 [jpa] 的所有权限:
![]() |
- 在 [1] 中,然后在 [2] 中:选择用户 [jpa]
- 在 [3] 中:选择标签页 [Schema Privileges]
- 在 [4] 中:选择模式 [jpa]
- 在 [5] 中:将授予用户 [jpa] 对模式 [jpa] 的所有权限
![]() |
- 在 [6] 中:确认所做的更改
为验证用户 [jpa] 能否操作模式 [jpa],先关闭管理员 MySQL。重新启动后,本次以用户名 [jpa/jpa] 登录:
![]() |
- 在 [1] 中:进行身份验证(jpa/jpa)
- 在 [2] 中:连接成功,并在 [Schemata] 中,可以看到我们拥有权限的模式。可以看到模式 [jpa]。
现在我们将使用第5.4.6节生成的脚本SQL [schema-articles.sql],创建与Firebird中的SGBD相同的[ARTICLES]表。
![]() |
- 转换为 [1]:使用应用程序 [MySQL Query Browser]
- 在 [2]、[3]、[4] 中:登录(jpa / jpa / jpa)
![]() |
- 转换为 [5]:打开脚本 SQL 以执行它
- 在[6]中:指第5.4.6节中创建的脚本[schema-articles.sql]。
![]() |
- 在 [7] 中:加载的脚本
- 在 [8] 中:执行该脚本
- 在 [9] 中:已创建表 [ARTICLES]
5.5.5. 驱动程序 JDBC 来自 MySQL5
MySQL的驱动程序JDBC可从与SGBD相同的地址下载:
![]() |
![]() |
- 在 [1] 中:请选择合适的 JDBC 驱动程序
- 在 [2] 中:选择合适的 Windows 版本
- 在 [3] 中:在下载的压缩包中,包含驱动程序 JDBC 的 Java 存档文件为 [mysql-connector-java-5.0.5-bin.jar]。我们将解压该文件,以便在教程示例中使用 JPA。
将其放置在与前一个相同的位置(第 5.4.7 节,位于 <jdbc> 文件夹中):
![]() |
为了测试此驱动程序 JDBC,我们将使用 Eclipse 以及 SQL Explorer 插件。建议读者按照第 5.4.7 节中所述的步骤进行操作。以下展示了一些关键的屏幕截图:
![]() |
- 在 [1] 中:已将驱动程序 JDBC 的存档指定为 MySQL5
- 在 [2] 中:MySQL5 的驱动程序 JDBC 已可用
![]() |
- 转换为 [3]:连接定义 (用户名, 密码)=(jpa, jpa)
- 在 [4] 中:连接已建立
- 在 [5] 中:已连接数据库
5.6. SGBD PostgreSQL
5.6.1. 安装
SGBD PostgreSQL 可在以下网址获取 [http://www.postgresql.org/download/]:
![]() |
- 在 [1] 中:PostgreSQL 的下载站点
- 在 [2] 中:选择 Windows 版本
- 在 [3] 中:选择带安装程序的版本
![]() |
- 在 [4]:下载的 zip 文件内容。双击文件 [postgresql-8.2.msi]
- 在 [5]:安装向导的首页
![]() |
- 在 [6] 中:选择典型安装并接受默认值
- 在 [6b] 中:创建将启动 PostgreSQL 服务的 Windows 账户,此处为账户 pgres,密码为 pgres。
![]() |
- 在 [7] 中:如果 [pgres] 账户尚未存在,则允许 PostgreSQL 创建该账户
- 在 [8] 中:设置 SGBD 的管理员账户,此处为 postgres,密码为 postgres
![]() |
- 在 [9] 和 [10] 中:接受默认值直至向导结束。PostgreSQL 将被安装。
安装 PostgreSQL 将在 [Démarrer / Programmes ] 中生成一个文件夹:

5.6.2. 启动/停止 PostgreSQL
PostgreSQL 服务器已作为 Windows 自动启动服务安装,c.a.d 会在 Windows 启动时立即运行。这种运行模式不太方便。我们将对其进行更改:
[Démarrer / Panneau de configuration / Performances et maintenance / Outils d'administration / Services ]:
![]() |
- 更改为 [1]:双击 [Services]
- 改为 [2]:可以看到存在一个名为 [PostgreSQL] 的服务,其启动名称为 [3],且启动类型为自动 [4]。
若要修改此设置,请双击服务 [PostgreSQL]:
![]() |
- 为 [1]:将该服务设置为手动启动
- 在 [2]:将其停止
- 在 [3] 上:确认服务的新配置
要手动启动和停止 PostgreSQL 服务,可以使用 [PostgreSQL] 文件夹中的快捷方式:
![]() |
- 在 [1] 中:启动 PostgreSQL 的快捷方式
- 在 [2] 中:用于停止该程序的快捷方式
5.6.3. 管理 PostgreSQL
在上图的屏幕截图中,应用程序 [pgAdmin III] (3) 用于管理 SGBD 和 PostgreSQL。 通过上方菜单依次启动 SGBD,然后启动 [pgAdmin III]:
![]() |
- 进入 [1]:双击 PostgreSQL 服务器以连接
- 在 [2,3] 中:以 SGBD 的管理员身份登录,此处用户名为 postgres,密码为 postgres
![]() |
- 在 [4] 中:唯一存在的数据库
- 在 [5] 中:唯一的现有用户
5.6.4. 创建用户 jpa 和数据库 jpa
本教程使用 PostgreSQL,并使用名为 jpa 的数据库以及同名用户。现在我们来创建它们。首先是用户:
![]() |
- 在 [1] 中:创建一个新角色(~用户)
- 在 [2] 中:创建用户 jpa
- 在 [3] 中:其密码为 jpa
- 在 [4] 中:重复输入密码
- 在 [5] 中:授权该用户创建数据库
- 在 [6] 中:用户 [jpa] 出现在登录角色中
现在处理数据库:
![]() |
- 在 [1] 中:创建与服务器的全新连接
- 在 [2] 中:该连接将命名为 jpa
- 在 [3]:要连接的机器
- 在 [4] 中:登录用户
- 在 [5] 中:其密码。通过 [OK] 验证连接配置
- 在 [6] 中:新连接已创建。该连接属于用户 jpa。该用户现在将创建一个新数据库:
![]() |
- n [1]:添加新数据库
- 在 [2] 中:其名称为 jpa
- 在 [3]:其所有者是之前创建的用户 jpa。通过 [OK] 进行确认
- 在 [4] 中:数据库 jpa 已创建。单击它即可连接到该数据库并查看其结构:
![]() |
- 在 [5] 中:[jpa] 模式的对象(特别是表)已显示出来。目前尚无数据。右键单击即可创建。此操作留给读者自行完成。
现在,我们将使用第 5.4.6 节生成的脚本 SQL [schema-articles.sql],创建与前面的 SGBD 相同的表 [ARTICLES]。
![]() |
- 在 [1] 中:打开编辑器 SQL
- 在 [2] 中:打开脚本 SQL
- 在 [3] 中:指定第 5.4.6 节中创建的脚本 [schema-articles.sql]。
![]() |
- 转换为 [4]:脚本已加载。执行该脚本。
- 在 [5] 中:已创建表 [ARTICLES]。
- 在 [6, 7] 中:其内容
5.6.5. JDBC 驱动程序(源自 PostgreSQL)
PostgreSQL 的驱动程序 JDBC 位于 PostgreSQL 安装目录下的 [jdbc] 文件夹中:
![]() |
我们将该 Jdbc 存档文件与之前(第 5.4.7 节)一样放置在 <jdbc> 文件夹中:
![]() |
为了测试此驱动程序 JDBC,我们将使用 Eclipse 及其 SQL Explorer 插件。建议读者按照第 5.4.7 节中的说明进行操作。以下展示了一些关键的屏幕截图:
![]() |
- 在 [1] 中:已将驱动程序 JDBC 的存档指定为 PostgreSQL
- 在 [2] 中:JDBC 驱动程序(源自 PostgreSQL)已可用
![]() |
- 转换为 [3]:连接定义 (用户名, 密码)=(jpa, jpa)
- 在 [4] 中:连接已建立
- 在 [5] 中:已连接数据库
- 在 [6] 中:表 [ARTICLES] 的内容
5.7. SGBD Oracle 10g Express
5.7.1. 安装
SGBD Oracle 10g Express 可在以下网址获取:[http://www.oracle.com/technology/software/products/database/xe/index.html]:
![]() |
- 在 [1]:Oracle 10g Express 下载站点
- 在 [2]:选择 Windows 版本。下载文件后,运行该文件:
![]() |
- 在 [1] 中:双击文件 [OracleXE.exe]
- 在 [2] 中:安装向导的第一页
![]() |
- 转换为 [3]:接受许可协议
- 生成 [4]:接受默认值。
![]() |
- 在 [5,6] 中:用户 SYSTEM 将拥有 system 密码。
- 在 [7] 中:启动安装
Oracle 10g Express 的安装会在 [Démarrer / Programmes ] 中生成一个文件夹:

5.7.2. 启动/停止 Oracle 10g
与之前的 SGBD 一样,Oracle 10g 被安装为 Windows 自动启动服务。我们将修改此配置:
[Démarrer / Panneau de configuration / Performances et maintenance / Outils d'administration / Services ]:
![]() |
- 改为 [1]:双击 [Services]
- 为 [2]:可见存在一个名为 [OracleServiceXE] 的服务,其已启动 [3] 且设置为自动启动 [4]。
- 在 [5] 中:另一个名为“Listener”的 Oracle 服务也处于活动状态,且为自动启动。
要修改此设置,请双击 [OracleServiceXE] 服务:
![]() |
- 在 [1] 中:将该服务设置为手动启动
- 在 [2]:将其停止
- 在 [3]:确认服务的新配置
对于服务 [OracleXETNSListener] 也将采用相同操作(参见上文 [5])。要手动启动和停止服务 OracleServiceXE,可使用 [Oracle] 文件夹中的快捷方式:
![]() |
- 在 [1] 中:用于启动 SGBD
- [2]:用于停止该服务
- [3]:用于管理(若尚未运行,则会启动)
5.7.3. 创建 jpa 用户和 jpa 数据库
在上图的屏幕截图中,[3]应用程序用于管理SGBD Oracle 10g Express。 通过上方菜单依次启动 SGBD、[1],然后启动管理应用程序 [3]:
![]() |
- 在 [1] 中:以 SGBD 的管理员身份登录(此处为 system / system)
- 在 [2] 中:创建新用户
![]() |
- 在 [4] 中:用户名
- 在 [5, 6] 中:其密码,此处为 jpa
- 在 [7] 中:用户 jpa 已创建
在 Oracle 中,用户会自动与同名数据库关联。因此,数据库 jpa 与用户 jpa 同时存在。
5.7.4. 创建数据库 jpa 中的表 [ARTICLES]
OracleXE已随SQL客户端安装,该客户端以命令行模式运行。使用Oracle同样提供的 SQL Developer,操作会更加便捷。可在以下网站找到该工具:
[http://www.oracle.com/technology/products/database/sql_developer/index.html]
![]() |
- 在 [1]:下载网站
- [2]:若已安装JRE(如本例),请选择不含JRE的Windows版本,因为[SQL Developer]是Java应用程序。
![]() |
- 在 [3] 中:解压下载的 ZIP 文件
- [4]:运行可执行文件 [sqldeveloper.exe]
![]() |
- 在 [5] 中:首次运行 [SQL Developer] 时,指定机器上已安装的 JRE 路径
- 在 [5b] 中:创建一个新的连接
![]() |
- 在 [6] 中:SQL Developer 允许连接到各种 SGBD。选择 Oracle。
- 在 [7] 中:为当前正在创建的连接命名的名称
- 在 [8] 中:连接的所有者
- 在 [9] 中:其密码(jpa)
- 在 [10] 中:保留默认值
- 在 [11]:用于测试连接(需启动 Oracle)
- 在 [12] 中:完成连接配置
- 在 [13] 中:jpa 数据库对象
- 在 [14]:可以创建表。与前面的情况一样,我们将根据第 5.4.6 节中创建的脚本创建表 [ARTICLES]。
![]() |
- 在 [15] 中:打开脚本 SQL
- 为 [16]:指定第 5.4.6 节中创建的脚本 SQL。
- 在 [17] 中:即将执行的脚本
![]() |
- 在 [18] 中:执行结果:已创建表 [ARTICLES]。双击该表可查看其属性。
- [19]:表的内容。
5.7.5. JDBC 驱动程序(源自 OracleXE)
OracleXE 的驱动程序 JDBC 位于 OracleXE 安装目录下的 [jdbc/lib] 文件夹中 [1]:
![]() |
我们将 Jdbc 压缩包 [ojdbc14.jar] 与之前(第 5.4.7 节)一样放置在 <jdbc> 文件夹 [2] 中:
为了测试此驱动程序 JDBC,我们将使用 Eclipse 及其 SQL Explorer 插件。建议读者按照第 5.4.7 节中的说明进行操作。以下展示了一些关键的屏幕截图:
![]() |
- 在 [1] 中:已将 JDBC 驱动程序的存档指定为 OracleXE
- 在 [2] 中:JDBC 驱动程序(源自 OracleXE)已可用
![]() |
- 在 [3] 中:连接定义 (用户名, 密码)=(jpa, jpa)
- 在 [4] 中:连接已建立
- 在 [5] 中:已连接数据库
- 在 [6] 中:表 [ARTICLES] 的内容
5.8. SGBD SQL Server Express 2005
5.8.1. 安装
SGBD SQL Server Express 2005 可在以下网址获取 [http://msdn.microsoft.com/vstudio/express/sql/download/]:
![]() |
- 在 [1]:首先下载并安装 .NET 2.0 平台
- 在 [2]:然后安装并下载 SQL Server Express 2005
- 在 [3] 中:接着安装并下载 SQL Server Management Studio Express,该工具可用于管理 SQL Server
安装 SQL Server Express 将在 [Démarrer / Programmes ] 中生成一个文件夹:
![]() |
- 在 [1] 中:SQL Server 的配置应用程序。还可用于启动/停止服务器
- 在 [2] 中:服务器管理应用程序
5.8.2. 启动/停止 SQL 服务器
与之前的 SGBD 一样,SQL Server Express 已作为 Windows 自动启动服务安装。我们将更改此配置:
[Démarrer / Panneau de configuration / Performances et maintenance / Outils d'administration / Services ]:
![]() |
- 更改为 [1]:双击 [Services]
- 为 [2]:可见存在一个名为 [SQL Server] 的服务,其已启动状态为 [3],且启动类型为自动 [4]。
- 在 [5] 中:另一个与 SQL Server 相关的服务,名为“SQL Server Browser”,同样处于活动状态且为自动启动。
要修改此设置,请双击 [SQL Server] 服务:
![]() |
- 更改为 [1]:将该服务设置为手动启动
- 在 [2]:将其停止
- 在 [3]:确认服务的新配置
对服务 [SQL Server Browser] 也将采用相同操作(参见上文 [5])。 要手动启动和停止 SQL 服务器服务,可使用 [SQL server] 文件夹中的 [1] 应用程序:
![]() |
![]() |
- 在 [1] 中:确保 TCP/IP 协议处于启用状态,然后进入该协议的属性设置。
- 在 [2] 中:在 [IP Addresses] 选项卡中,[IPAll] 选项:
- [TCP Dynamic ports]字段留空
- 在 [TCP Port] 中,将服务器监听端口设置为 1433
![]() |
- 在 [3] 中:右键单击服务 [SQL Server] 可访问服务器的启动/停止选项。此处,我们启动它。
- 在 [4] 中:SQL 服务器已启动
5.8.3. 创建 jpa 用户和 jpa 数据库
按照上述步骤启动 SGBD,然后通过下方菜单启动管理应用程序 [1]:
![]() |
![]() |
- 在 [1] 中:以 Windows 管理员身份连接到 SQL 服务器
- 在 [2] 中:配置连接属性
![]() |
- 在 [3] 中:允许混合连接模式访问服务器:既可使用 Windows 登录(Windows 用户),也可使用 SQL 服务器登录(在 SQL 服务器内定义的账户,独立于任何 Windows 账户)。
- 在 [3b] 中:创建 SQL 服务器用户
![]() |
- 在 [4] 中:选项 [General]
- 在 [5] 中:登录名
- 在 [6] 中:密码(此处为 jpa)
- 在 [7] 中:选项 [Server Roles]
- 在 [8] 中:用户 jpa 将拥有创建数据库的权限
确认此配置:
![]() |
- 在 [9] 中:已创建用户 jpa
- 在 [10] 中:注销
- 在 [11]:重新登录
![]() |
- 在 [12] 中:以用户 jpa/jpa 身份登录
- 在 [13] 中:登录后,用户 jpa 创建了一个数据库
![]() |
- 在 [14] 中:该数据库将命名为 jpa
- 在 [15] 中:该数据库将归 jpa 用户所有
- 在 [16] 中:数据库 jpa 已创建
5.8.4. 在 jpa 数据库中创建表 [ARTICLES]
与前面的示例一样,我们将根据第5.4.6节中创建的脚本创建表[ARTICLES]。
![]() |
- 在 [1] 中:打开脚本 SQL
- 在 [2] 中:指定第 5.4.6 节(第 240 页)中创建的脚本 SQL。
- 在 [3] 中:需重新进行身份验证(jpa/jpa)
- 在 [4] 中:即将执行的脚本
- 在 [5] 中:选择将要执行脚本的数据库
- 在 [6] 中:执行脚本
![]() |
- 在 [7] 中:执行结果:已创建表 [ARTICLES]。
- 在 [8] 中:查询其内容
- 在 [9] 中:表的内容。
5.8.5. JDBC 驱动程序(源自 SQL Server Express)
![]() |
- 在 [1] 中:通过 Google 搜索文本 [Microsoft SQL Server 2005 JDBC Driver],将我们引导至 JDBC 驱动程序的下载页面。我们选择最新版本
- [2]:下载的文件。双击该文件。解压后生成一个文件夹,其中包含 Jdbc 驱动程序 [3]
- (文件名:[4]):我们将 Jdbc 压缩包 [sqljdbc.jar] 与之前(第 5.4.7 节)一样放置在 <jdbc> 文件夹中
为了测试此 JDBC 驱动程序,我们将使用 Eclipse 及 SQL Explorer 插件。建议读者按照第 5.4.7 节所述步骤操作。以下展示若干关键屏幕截图:
![]() |
- 在 [1] 中:已将 JDBC 驱动程序的存档指定为 SQL Server
- 在 [2] 中:SQL 服务器的驱动程序 JDBC 已可用
![]() |
- 转换为 [3]:连接定义 (用户名, 密码)=(jpa, jpa)
- 在 [4] 中:连接已建立
- 在 [5] 中:已连接数据库
- 在 [6] 中:表 [ARTICLES] 的内容
5.9. SGBD HSQLDB
5.9.1. 安装
SGBD HSQLDB 可在网址 [http://sourceforge.net/projects/hsqldb] 获取。这是一个用 Java 编写的 SGBD,内存占用极低,管理的是内存数据库而非磁盘数据库。 因此,查询执行速度极快,这也是其主要优势。 通过这种方式在内存中创建的数据库,在服务器停止并重新启动后仍可恢复。实际上,用于创建数据库的 SQL 命令会被记录在日志文件中,以便在服务器下次启动时重新执行。因此,数据库能够长期持久化。
该方法存在局限性,且 HSQLDB 并非面向商业用途的 SGBD。其主要价值在于测试或演示应用。 例如,由于 HSQLDB 采用 Java 编写,因此可以将其集成到 Ant(Another Neat Tool)任务中——这是一款用于任务自动化的 Java 工具。 因此,由 Ant 自动化的正在开发中的代码日常测试,将能够集成由 SGBD 和 HSQLDB 管理的数据库测试。服务器将通过 Java 任务进行启动、停止和管理。
![]() |
- 在 [1] 中:下载站点
- 在 [2] 中:获取最新版本
![]() |
- 在 [3] 中:解压下载的 zip 文件
- 在 [4] 中:解压后生成的 [hsqldb] 文件夹
- 到 [5]: [demo]文件夹,其中包含用于启动[hsql]和[6]服务器的脚本,以及用于启动一个简易服务器管理工具的[7]脚本。
5.9.2. 启动/停止 HSQLDB
要启动 HSQLDB 服务器,请双击上方的 [runManager.bat] [6] 应用程序:
![]() |
- 在 [1] 中:可以看到,要停止服务器,只需在窗口中按下 Ctrl-C 即可。
5.9.3. 数据库 [test]
默认管理的数据库位于文件夹 [data] 中:
![]() |
- 在 [1] 中:启动时,SGBD HSQL 会执行名为 [test.script] 的脚本
- 第 1 行:创建了一个名为 [public] 的模式
- 第 2 行:创建用户 [sa],密码为空
- 第 3 行:用户 [sa] 被授予管理员权限
最终,创建了一个具有管理权限的用户。后续我们将使用该用户。
5.9.4. JDBC 驱动程序(源自 HSQL)
SGBD 的 Jdbc 驱动程序位于 HSQL 文件夹中:
![]() |
- 在 [1] 中:[hsqldb.jar] 压缩包包含 SGBD 和 HSQL 的 JDBC 驱动程序
- 在 [2] 中:我们将此归档文件与前文所述(第 5.4.7 节)一样放置在 <jdbc> 文件夹中
为了验证此 JDBC 驱动程序,我们将使用 Eclipse 及其 SQL Explorer 插件。请读者按照第 5.4.7 节所述步骤操作。以下展示几张关键的屏幕截图:
![]() |
- 在 [1] 中:[window / preferences / SQL Explorer / JDBC Drivers]
- 在 [2] 中:配置服务器 [HSQLDB]
- 在 [3] 中:指定包含 Jdbc 驱动程序的存档 [hsqldb.jar]
- 在 [4] 中:Jdbc 驱动程序的 Java 类名称
- 在 [5] 中:Jdbc 驱动程序已配置
完成上述操作后,连接到服务器 HSQL。请先启动该服务器。
![]() |
- 在 [6] 中:创建一个新的连接
- 在 [7] 中:为其命名
- 在 [8] 中:我们希望连接到服务器 HSQLDB
- 在 [9] 中:指定要连接的数据库的 URL。这将是之前看到的 [test] 数据库。
- 在 [10] 中:以用户 [sa] 的身份登录。我们已看到他是 SGBD 的管理员。
- 在 [11] 中:用户 [sa] 没有密码。
确认连接配置。
![]() |
- 在 [12] 中:登录
- 在 [13]:正在验证身份
- 在 [14]:已连接
![]() |
- 在 [15] 中:模式 [PUBLIC] 尚未包含任何表
- 在 [16] 中:将根据第 5.4.6 节中创建的脚本 [schema-articles.sql] 创建表 [ARTICLES]。
- 在 [17] 中:选择脚本
![]() |
- 在 [18] 中:待执行的脚本
- 在 [19] 中:在清除所有注释后执行该脚本,因为 HSQLB 不接受注释。
![]() |
- 脚本执行完成后,在 [20] 中刷新数据库的显示
- 在 [21] 中:表 [ARTICLES] 确实存在
- 在 [22] 中:其内容
停止并重新启动 HSQLDB 服务器。完成后,检查 [test.script] 文件:
可以看到,SGBD 已将上一会话中执行的各种 SQL 命令存储在内存中,并在新会话启动时重新执行这些命令。 此外(第2行)可见,表[ARTICLES]是在内存中创建的(MEMORY)。 在每次会话中,发出的 SQL 命令会被存储在 [test.log] 中,以便在下一次会话开始时复制到 [test.script] 中,并在会话开始时重新执行。
5.10. SGBD Apache Derby
5.10.1. 安装
SGBD Apache Derby 可通过网址 [http://db.apache.org/derby/] 获取。这是一个同样用 Java 编写的 SGBD,且内存占用极低。它具有与 HSQLDB 类似的优势。 它同样可以嵌入到 Java 应用程序中,成为应用程序的组成部分,并在同一进程中运行。
![]() |
- 在 [1] 中:下载网站
- 在 [2,3] 中:获取最新版本
![]() |
- 在 [3] 中:解压下载的 zip 文件
- 在 [4] 中:解压后生成的 [db-derby-*-bin] 文件夹
- 到 [5]: [bin]文件夹,其中包含用于启动[db derby]和[6]服务器的脚本,以及用于停止服务器的[7]脚本。
5.10.2. 启动/停止 Apache Derby(Db Derby)
要启动 Db Derby 服务器,请双击上述应用程序 [startNetworkServer] [6]:
![]() |
- 在 [1] 中:服务器已启动。我们将使用上方的 [stopNetworkServer] [7] 应用程序将其停止。
5.10.3. Db Derby 的 JDBC 驱动程序
SGBD Db Derby 的 Jdbc 驱动程序位于安装目录下的 [lib] 文件夹中:
![]() |
- 在 [1] 中:[derbyclient.jar] 压缩包包含 SGBD Db Derby 的 JDBC 驱动程序
- 在 [2] 中:我们将此归档文件与前文所述(第 5.4.7 节)一样放置在 <jdbc> 文件夹中
为了测试此 JDBC 驱动程序,我们将使用 Eclipse 及 SQL Explorer 插件。建议读者按照第 5.4.7 节所述步骤操作。以下展示若干关键屏幕截图:
![]() |
- 在 [1] 中:[window / preferences / SQL Explorer / JDBC Drivers]
- 在 [2] 中:Apache Derby 的 Jdbc 驱动程序未出现在列表中。将其添加进去。
![]() |
- 在 [3] 中:为新驱动程序命名
- 在 [4] 中:明确了 Jdbc 驱动程序支持的 URL 格式
- 在 [5] 中:指定了 JDBC 驱动程序的 .jar 文件
- 在 [5b] 中:指定 Jdbc 驱动程序的 Java 类名称
- 在 [5c] 中:Jdbc 驱动程序已配置
完成上述操作后,连接到 Apache Derby 服务器。请先启动该服务器。
![]() |
- 在 [6] 中:创建一个新连接
- 在 [7] 中:为其命名
- 在 [8] 中:尝试连接 Apache Derby 服务器
- 在 [9] 中:指定要连接的数据库的 URL。在标准开头 [jdbc:derby://localhost:1527] 之后,需填写磁盘中包含 Derby 数据库的文件夹路径。 如果该文件夹尚不存在,[create=true]选项将自动创建该文件夹。
- 在 [10,11] 中:以用户 [jpa/jpa] 的身份进行连接。我尚未深入研究,但似乎登录名和密码可以任意设置。若 create=true,此处需声明数据库的所有者。
确认连接配置。
![]() |
- 在 [12] 中:登录
- 在 [13]:进行身份验证 (jpa/jpa)
- 在 [14] 中:已登录
![]() |
- 在 [15] 中:[jpa] 模式尚未出现。
- 在 [16] 中:将根据第 5.4.6 节中创建的脚本 [schema-articles.sql] 创建表 [ARTICLES]。
- 在 [17] 中:选择脚本
![]() |
- 在 [18] 中:待执行的脚本
- 在 [19] 中:在执行前需删除所有注释,因为 Apache Derby 和 HSQLB 一样不接受注释。
![]() |
- 脚本执行完成后,在 [20] 中刷新数据库显示
- 在 [21] 中:模式 [jpa] 和表 [ARTICLES] 确实存在
- 在 [22] 中:表 [ARTICLES] 的内容
![]() |
- 在 [23] 中:包含创建数据库的文件夹 [derby\jpa] 的内容。
5.11. Spring 2 框架
Spring 2 框架可通过以下网址获取:[http://www.springframework.org/download]:
![]() |
- 在 [1]:下载最新版本
- 在 [2]:下载所谓的“带依赖项”版本,因为它包含 Spring 集成的第三方工具的 .jar 文件,这些工具我们经常需要。
![]() |
- 在 [3] 中:解压下载的压缩包
- 在 [4] 中:Spring 2.1 的安装文件夹
![]() |
- 在 [5] 中:<dist> 文件夹内包含 Spring 的压缩包。[spring.jar] 压缩包汇集了 Spring 框架的所有类。这些类也可按模块形式在 [6] 的 <modules> 文件夹中获取。 若已知所需模块,可在此处查找。这样便能避免将应用程序不需要的归档文件包含其中。
![]() |
- 在 [7] 中:<lib> 文件夹包含 Spring 所使用的第三方工具的归档文件
- 在 [8] 中:[jakarta-commons] 项目的部分存档
当教程使用 Spring 包时,需从 Spring 安装目录下的 <dist> 文件夹或 <lib> 文件夹中获取。
5.12. 的容器EJB3来自JBoss
JBoss 的容器 EJB3 可在以下网址获取:
![]() |
- 在 [1] 中:下载了 JBoss 和 EJB3。可以注意到产品的日期(2006年9月),而下载时间是2007年5月。不禁让人怀疑该产品是否仍在更新。
- 在 [2] 中:下载的文件
![]() |
- 在 [3] 中:解压后的 zip 文件
- 在 [4] 中:[hibernate-all.jar, jboss-ejb3-all.jar, thirdparty-all.jar] 归档文件构成了 EJB3 的容器,该容器包含 JBoss。必须将它们放入使用该容器的应用程序的类路径中。








































































































































































