IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Information Management  >

与 Apache Derby 一起使用 DB2 plug-ins for Eclipse

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

讨论


级别: 初级

Susan L. Cline, Cloudscape 社区开发人员

2004 年 12 月 01 日

IBM? DB2? Universal Database? (UDB) plug-ins for Eclipse 为 Cloudscape? 和 Derby 用户提供了连接、浏览和创建数据库对象的能力。本文阐释了如何使用这个基于 Eclipse 的工具,以及如何排除连接问题。

概述

本文简要地概述了 Eclipse 平台和插件架构。并且深入地讨论了 DB2 plug-ins for Eclipse 的配置和使用。本文讨论的话题包括创建到 Cloudscape 或 Derby 数据库的连接,排除连接问题,使用 Database Explorer 和使用 SQL Scrapbook。在阅读本文之后,您就会了解 Eclipse 平台的基本术语,掌握如何使用 Eclipse 以及如何与 Derby 数据库一起使用 DB2 plug-ins for Eclipse。

如果您已经非常熟悉 Eclipse,并且想立即开始使用 DB2 plug-ins for Eclipse,那么请直接阅读 软件需求 一节。





回页首


Eclipse 架构简介

Eclipse 平台是一种可以实现工具集成的开放平台。Eclipse 可以运行在多种操作系统上,并且可以使用多种语言构建应用程序,包括超文本标记语言( Hypertext Markup Language,HTML)、可扩展标记语言(eXtensible Markup Language,XML)、Java? 和 C。Eclipse 的目标之一就是提供一种 Java 开发环境;另一个目标是在一个平台上集成多种工具和功能。这使工具供应商和开发人员可以创建新的工具,以满足特定需求和提供不同的功能。这种工具的多样性便于 Eclipse 用户从一个集成的、易于使用的、一致的平台上进行选择。

Eclipse 的可扩展性

Eclipse 是一个可扩展的平台,这意味着可以向其中添加更多的工具和组件。当您在同一种环境中编写工具和使用工具时,这个平台是惟一的。能够吸引如此多的工具开发人员的关键之一就在于 Eclipse 易于扩展,这是通过使用一种叫做“插件(plug-in)”的东西来实现的。Eclipse 用这个术语来表示可添加到 Eclipse 平台的一个功能单元。每个插件都必须遵从特定的规则,例如实现某些 Java 接口,并且要依靠其他插件来实现自己的基本行为。

工具供应商和开发人员把他们的产品作为一种可安装的特性交付给 Eclipse 平台。供应商创建的每个工具可能由一个插件组成,也可能由多个插件组成,这些插件提供了该工具所需的功能。这种特性或者工具是通过将 zip 文件解压到 Eclipse plug-ins 目录或者通过 Eclipse 的内建工具 Update Manager 下载来安装的。由于一个工具可能由多个插件组成,而一个功能部件就是一个工具,Eclipse 术语“feature”通常意味着由多个打包在一起的插件组成的一个可安装组件,这些插件组成了一个具有类似或互补功能的工具。

实际上,在安装 Eclipse 的时候,作为 Eclipse 中 Java IDE 部分的 Java Development Tools 只是一个插件。Eclipse 平台就是插件要插入到的地方(plug-in-to)。术语 workbench(工作台)是 Eclipse 平台的 User Interface (UI) 部分,用户可以与它进行交互。

下图展示了 Eclipse 平台的架构。


图 1. Eclipse 概述
Eclipse 概述

Eclipse 术语

至此,我们已经提到了工作台(workbench),但是还有其他一些上图中使用到的术语需要来考察一下。图中显示一个组件不在讨论之列,它就是插件开发环境(Plug-in Development Environment,PDE)—因为它超出了本文讨论的范围 — 不过有趣的是,PDE本身也是插件的,您可以使用 PDE 来构建运行在 Eclipse 上的其他插件。

工作区是 Eclipse 中需要了解的一个重要概念,因为它被用来管理与一个需要执行的任务相关的资源。当用户在 Eclipse 中开始一个新的任务时,就需要把与那个工作单元相关的资源组合到一起。工作区可以被看作是与您希望完成的某个任务相关的一组资源。

工作区中的资源由项目、文件夹和文件组成。工作区可以容纳一个或多个顶层项目,这些项目被映射文件系统的目录中,文件系统中存放着文件夹和文件。工具可以创建、修改和删除工作区中的资源。


图 2. Eclipse 中的工作区组件
工作区组件

上图展示了一个带有三个项目的工作区,项目名称分别为 proj1、proj2 和 SimpleProj。proj1 是一种 Java 类型的项目,它关联了 com.test 包中的 MyClass.javaMyClass.class。在图中您不能看到 proj2 关联了哪些文件,但可以看到项目 SimpleProj 是一个“简单”项目,它包含一个名为 SimpleFolder 的文件夹和一个名为 myfile 的文件。

在这个例子中,有两个 Java 项目,在项目名称左边的文件夹图标上注有 J 字样,还有一个名为 SimpleProj 的简单项目。

Eclipse 中另一个重要的概念是 工作台,即 Eclipse 平台的 UI,用户通过与该组件的交互来完成与某个特定项目或工作区相关的任务。换句话说,工作台允许您与工作区中的资源进行交互。

工作台中的组件有 Editor、View 和 Perspective。下表解释了组成工作台的各种组件的用途。

表 1. Eclipse 中的工作台组件

组件名称 组件用途
Editor 用于 Open、Edit、Save和 Close 文件。一次可以打开多个 editor,以叠式标签的形式显示。不同类型的文件需要使用不同类型的 editor。 View 提供关于对象的可视化信息。View 可以包含其他 View。
和 editor 一起可以提供关于对象的完整信息。
Perspective Perspective 和 editor 的集合被用于连接一个特定的任务。
一次只能看到一个 Perspective,但是同时可以打开多个 Perspective。
可以很容易地切换到其他已打开的 Perspective

下图是显示 Java Perspective 的工作台。


图 3. Eclipse 中的工作台术语
工作台术语




回页首


DB2 plug-ins for Eclipse 架构

DB2 plug-ins for Eclipse 特性

DB2 plug-ins for Eclipse 特性由多个插件组成,这些插件的功能可归为两大类 — Cloudscape 数据库浏览器和 DB2 UDB Migration 工具。本文讨论如何使用该工具的数据库浏览器功能。对 Cloudscape to DB2 UDB 的迁移工具的讨论将在下一篇文章中讨论。





回页首


软件需求

掌握了 Eclipse 的基本术语之后,您就可以开始使用该工具了。本节中列出的软件都是必需的,并且可以免费下载。

首先安装 IBM 的 SDK 或者 Sun 的 JDK 中包含的 JVM,版本 1.4.2 或者更高。如果使用 Windows 或 Linux 的安装程序安装 Cloudscape,那么安装过程就已经包含了 IBM 1.4.2 JRE。

  • 这个版本的 JVM(或更高版本)是运行 Cloudscape 10.0 所必需的。
  • DB2 plug-ins for Eclipse 没有附带 JRE,因此,如果想运行 Eclipse,系统必须具有 JVM。
是不是对 Cloudscape 和 Derby 这两个名称感到困惑?

IBM Cloudscape 是 Apache Derby 开放源代码数据库的商业版本。在本文中这两个名称可以互换。

从下面列出的数据库选项中选择 其中之一进行安装:

  1. Cloudscape 10.0, GA 版本。(包含了 IBM DB2 Java Database Connection (JDBC) 通用驱动程序)。
  2. Apache DerbyIBM DB2 JDBC 通用驱动程序

另外,还需要安装 DB2 plug-ins for Eclipse:

由于这些插件包含了 Eclipse version 3.0,所以如果您已经在机器上安装了其他的版本 Eclipse,那么就需要将这个产品安装在一个新目录中。

如果您想把数据从 Cloudscape 或 Derby 数据库迁移到 DB2 UDB 数据库,那么工具就需要支持版本 8.1.x for Linux、Unix 和 Windows。 将在另一篇文章中讨论插件的这一功能。





回页首


创建到 Cloudscape 数据库的连接

使用 DB2 plug-ins for Eclipse 与 Cloudscape 数据库合作的第一步是创建到数据库的连接。

在 Eclipse 中用 JDBC 创建到数据库的连接非常简单。Database Connection 向导将带您一步一步地指定 JDBC 驱动程序,以及所有 Connection URL 属性。此外,如果拥有到 Cloudscape 数据库的正确的 JDBC 连接,就可以使用过滤器来选择该连接允许您访问的模式。 下面会对此进行详细的描述,但是首先还是来讨论一下 Cloudscape 数据库的连接类型。

Cloudscape 数据库连接类型

在 Cloudscape 中,访问数据库通常有两种方式。第一种方式是使用 Embedded Driver 来充当应用程序中的内嵌的数据库引擎。数据库对于它所嵌入到的 Java 应用程序的用户来说是透明的。

第二种访问 Derby 数据库的方式是通过 Network Server 框架,这种框架通常是作为客户端/服务器的数据库服务器。

为了理解 Eclipse 到 Cloudscape 数据库可以使用的连接类型,了解使用命令行工具 ij 连接 Cloudscape 数据库的详细情况会很有帮助。ij 包含在 Derby 和 Cloudscape 中,它使用 JDBC 协议和连接 URL 语义来连接到数据库。

ij 使用的连接类型要么是内嵌类型,要么是网络服务器类型。此外,还有一个称作“嵌入式服务器(Embedded Server)”的变种。下表展示了通过每种驱动程序连接数据库时所需的 jar 文件名、连接类型和 JDBC URL。

其中人为的换行符以一个反斜杠字符表示。

表 2. Cloudscape 中的连接类型和 JDBC 驱动程序

Embedded Driver
JDBC Driver Jar Filederby.jar
JDBC Driver Nameorg.apache.derby.jdbc.EmbeddedDriver
JDBC Connection URL jdbc:derby: databaseName;URLAttributes
客户机是通过自己的 JVM 访问数据库吗?
是否允许多线程访问?
是否允许多客户机访问?
?
Network Driver
JDBC Driver Jar Filedb2jcc_jar, db2jcc_license_c.jar (license jar required)
JDBC Driver Namecom.ibm.db2jcc.DB2Driver
JDBC Connection URL jdbc:derby:net:// host_name:port_number/databaseName; \
embeddedURLattributes:UniversalDriverattributes;
客户端是否通过自己的 JVM 访问数据库?
是否允许多线程访问?
是否允许多客户机访问?
?
Embedded Server
这种类型不同于前面任何一种类型。应用程序可以在一个线程内从它自己的 JVM 中使用内嵌的驱动程序来启动数据库。
另一个线程启动 Network Server。服务器框架访问已经由嵌入式驱动程序启动的实例。启动 Network Server 的 JVM 可以访问内嵌的连接。使用这种配置是因为允许远程客户机访问可以从本地访问数据库的应用程序。其他 JVM 可以通过 Network Driver 访问数据库。

在通过 Eclipse 连接到一个 Derby 数据库之前,首先应确保您能够连接到某个示例数据库或您使用 ij 自己创建的数据库。如果您还没有使用 ij,那么首先将 derby.jarderbytools.jar 添加到 classpath 中。然后发出以下指令来启动 ij 并在当前目录中创建一个名为 mytestDB 的示例数据库。

     C:\derby_home>java -Dij.protocol=jdbc:derby: org.apache.derby.tools.ij
     ij version 10.0 (C) Copyright IBM Corp. 1997, 2004.
     ij> connect 'mytestDB;create=true';
     

Database Connection 向导

安装好 DB2 plug-ins for Eclipse 之后,启动 Eclipse 并接受默认工作区。显示的透视图是 Cloudscape 透视图,这是为该工具创建的一个新的透视图。Cloudscape 透视图中包含的一些视图有 Database Explorer、Navigator、DB Output 和 Tasks 视图。在 Database Explorer 视图中的任何地方单击鼠标,激活该视图。在该视图的空白处单击右键,弹出 Database Explorer 的上下文菜单。如果您是第一次在这个工作区内建立一个连接,那么惟一的选项是“New Connection...”。 选择该选项,弹出“New Database Connection”向导。下图展示了 Database Explorer 视图,其中包含有上下文菜单选项“New Connection...”。


图 4. Database Explorer 视图,New Connection 上下文菜单
New Connection 上下文菜单选项

Database Connection 向导的第一个窗口提示输入一个连接名称,然后选择 Choose a DB2 选项,或者选择 Choose a database manager and JDBC driver 选项。对于第一个连接,您将使用 Embedded Driver,通常在浏览数据库时会使用这种连接类型。连接名称应该表明连接类型,例如 “Cloudscape_Embedded”。选择 Choose a database manager and JDBC 驱动程序选项,然后单击 Next 按钮。

第二个窗口要求给出所创建的 Cloudscape_Embedded 连接的 Connection 参数。 对于内嵌的 Cloudscape 驱动程序,使用下面的值作为所需参数:

表 3. 内嵌连接的连接参数

Database Manager Apache Derby, V 10.0
JDBC Driver Apache Derby Embedded Driver
Database 数据库路径全称
例如,C:\derby_home\mytestDB
JDBC Driver Class (不可编辑) org.apache.derby.jdbc.EmbeddedDriver
Class 定位 C:\derby_home\lib\derby.jar
Connection URL (不可编辑) jdbc:derby: databaseName;URLAttributes
例如,jdbc:derby:C:\derby_home\mytestDB;create=true

如果您想创建一个新的数据库,那么应勾选 Create the database if required复选框。这样将会在您作为 Database 安装位置而指定的目录中创建数据库。即使该数据库已经存在,也不会导致任何损害。对于您需要建立内嵌连接的数据库来说,除非有该数据库的用户认证集,否则不需要提供用户 ID 和密码来测试连接。接下来单击 Test Connection 按钮。如果一切正常,您就会收到一个消息,通知您连接成功建立,可以进入下一步了。如果失败了,那么您可以对照下表列出的一些常见错误查找原因。

常见连接问题:

  • 确保使用了正确的驱动程序。
    您想要使用的驱动程序是内嵌驱动程序,它包含在 derby.jar 中。例如,即使“JDBC Driver”处为“Apache Derby Embedded”,但是类位置指向了错误的 jar 文件,那么就会得到类似这样的错误:

    Connection to C:\derby_home\mytestDB failed. IWAS0126E Problems encountered while trying to establish
    connection Cloudscape_Embedded. Reason: 'Problems encountered while loading the jdbc driver.
    Reason: 'org.apache.derby.jdbc.EmbeddedDriver'


  • 确保使用了正确的 JDBC 驱动程序名称。
    Database Connection 向导的工作方式是根据文本域中的 JDBC 驱动程序名来形成 Connection URL。应确保它指向 “Apache Derby Embedded Driver”。

  • 在一个嵌入式环境中,应确保没有其他应用程序正在访问该数据库。
    如果您正在使用其他客户机应用程序,例如 ij,这个应用程序连接到一个数据库,同时您正在从 Eclipse 中测试到该数据库的连接,那么就会导致失败并得到类似这样的错误消息:

    Connection to C:\derby_home\mytestDB failed. IWAS0126E Problems encountered while trying to establish
    connection Cloudscape_Embedded. Reason: 'Failed to start database C:\derby_home\mytestDB',
    see the next exception for details.


  • 在嵌入式环境中,不要试图在 Eclipse 外面访问数据库。
    这实际上是上述问题的反面。当 Eclipse 使用一个嵌入式连接连接到一个 Cloudscape 数据库时,该数据库对于其他应用程序就“锁”上了,即使使用该连接的 Database Explorer 视图中的上下文菜单选项中的“disconnect”断开与数据库的连接,也不能访问。在退出 Eclipse 之前其他应用程序不能使用该数据库。

假设现在您已测试了连接并获得成功,单击 Next 按钮,进入标题为“Limit the objects retreived from the database”的窗口。

这个窗口允许您过滤掉不想查看的特定的 SCHEMAS 或 TABLES。现在,如果勾选了 Target Schema with the Filter SYS,则取消选定 Enabled。这里列出的 Predicate 是“NOT LIKE”,通过 unchecking Enabled 复选框,您应该可以看到包含在 SYS 模式中的所有表。下面的图展示了在取消选定该复选框之后屏幕应该出现的样子。


图 5. 限制从数据库检索的对象
过滤模式和对象

现在单击 Finish按钮。您已经成功地创建了一个到 Cloudscape 数据库的嵌入式连接!在解释其他连接类型之前,对这个数据库的研究将推迟。不过,如果您真的想现在就浏览这个数据库,那么请阅读 Database Explorer 小节。

网络服务器连接

本节中提供了如何建立到 Cloudscape Network Server 的连接的一些信息和图片。在使用 Network Driver 连接到一个数据库之前,需要确定已经启动了网络服务器。对第一个例子来说,首先在运行 Eclipse 的同一台主机上启动网络服务器。

为了启动网络服务器:

  • 设置 classpath,使其包括以下 jar 文件: derby.jar 和 derbynet.jar
  • 在 localhost 上运行下面的命令,默认端口 1527 启动 Network Server:

    java org.apache.derby.drda.NetworkServerControl start

在启动网络服务器时可以使用一些选项。请参阅 Derby Server and Administration Guide 以了解更多细节。

表 4. 同一台主机上网络驱动程序的连接参数

Database Manager Apache Derby, V 10.0
JDBC Driver IBM DB2 Universal
Database "C:\CS\dbs\testNS;create=true"
Host localhost
Port 1527
JDBC Driver Class (不可编辑) com.ibm.db2.jcc.DB2Driver
Class location C:\derby\lib\db2jcc_license_c.jar;C:\derby\lib\db2jcc.jar
Connection URL (不可编辑) jdbc:derby:net://localhost:1527/"C:\CS\dbs\testNS;create=true"

在 1.0.2 Beta 版本的 DB2 plug-ins for Eclipse 中有一个问题,这个问题与在 Connection 向导中使用 Network Server 时形成 Connection URL 的方式有关。可能遇到的第一个问题是没有指定数据库的路径,而是只指定数据库本身的名称。例如,如果您想连接到一个名为“testNS”的数据库,但是没有指定到该数据库的完整路径,那么不需要修改 Database 条目。这时“Database”字段是“testNS”,Connection URL 将显示为 jdbc:derby:net://localhost:1527/testNS,连接将获得成功。即使勾选了“Create the database if required”复选框,连接也将成功: jdbc:derby:net://localhost:1527/testNS;create=true,这是在没有以路径指定数据库的情况下的连接属性。

然而,如果给出了到数据库的完整路径,那么不管是否勾选了“Create the database if required” 复选框,Connection URL 都不能被正确指定。例如,假设主机上数据库的路径为 C:\dbs\TestNS,则由向导创建的 Connection URL 就是 jdbc:derby:net://localhost:1527/C:\CS\dbs\testNS。这时连接将失败。为了防止这种情况发生,“Database”字段中的条目必须是用双引号括起来的数据库完整路径以及嵌入式 Connection URL 属性,例如“create=true”。为了连接到上面提到的同一个数据库,并在必要时创建数据库,Database 字段条目看上去应该是类似于: “C:\CS\dbs\testNS;create=true”。关于使用复选框创建数据库的问题是 “create=true”属性没有用双引号括起来,而是附在 Connection URL 后面。

另一个要添加到 Database 连接 URL 的属性是 Universal Driver Attribute “retrieveMessagesFromServerOnGetMessage”。这是一个非常有用的属性,在被设为 true 时(默认值是 false),它可以用来获得错误消息文本。默认情况下,当使用 DB2 Universal Driver 时,出现错误的情况下只有 SQLState 会显示出来。该属性不是 Embedded Driver 属性的一部分,因此在 Embedded Driver 属性周围的双引号以外使用。

下图展示了在数据库字段中如何在数据库完整路径以及 Embedded Driver 属性“create=true” 周围使用双引号。Universal Driver 属性的 retrieveMessagesFromServerOnGetMessage=true 设置被附在 Embedded Driver 属性的后面,中间以一个冒号隔开。

当测试到 Network Server 的连接时,如果没有为数据库设置用户认证,则需要一个用户名和密码来建立连接。


图 6. 到本地主机的网络服务器连接
网络服务器连接

以这里提供的信息为指南,测试到 Derby 网络服务器的连接。如果连接失败,则对照下面的列表进行检查,看是否属于网络服务器的连接问题。

网络服务器连接问题

  • 确保在连接向导中指定的主机和端口上启动了网络服务器。 如果在测试连接时不能得到到数据库的连接,那么可能是因为没有启动网络服务器, 或者可能是指向了错误的主机或端口。在这种情况下,将得到类似这样的错误:

    Connection to "C:\CS\dbs\testNS;create=true" failed. IWAS0126E Problems encountered while trying
    to establish connection Derby_NS. Reason: java.net.ConnectException: Error opening socket to server localhost on port 1527 with message: Connection refused: connect'


  • 创建新数据库时不要使用复选框。
    如前所述,对于 1.0.2 beta 版,如果在指定到数据库的路径时使用了 “Create the database if required” 复选框,就会产生问题。上面的注解解释了和 Connection URL 有关的问题,以及如何正确地指定 create=true 属性。如果的确碰到这样的问题,那么您将看到一个类似这样的错误消息:

    Connection to "C:\CS\dbs\testNS;create=true" failed. IWAS0126E Problems encountered while trying
    to establish connection Derby_NS. Reason: 'Invalid database url syntax:
    jdbc:derby:net://localhost:1527/ C:\CS\dbs\testNS;create=true'


  • 在 Connection URL 中将 Universal Driver 属性“retrieveMessagesFromServerOnGetMessage” 设置为 ture。
    默认情况下该属性被设为 false。通过将其设置为 true,可以对连接问题进行更好的诊断。此外,当在 Network Server 连接上执行 SQL 语句时,它将提供消息文本,而不仅仅是 SQLState。

  • 检查前面的常见连接问题列表
    也许问题根本与 Network Server 无关,但是可能属于 常见连接问题

待到连接成功后,单击 Finish 按钮以建立到数据库的网络服务器连接。

连接到远程网络服务器

接下来讨论的连接类型是从 Eclipse 到另一台主机,即默认端口为 1527 的网络服务器的连接。下表展示了关于从运行 Eclipse 的本地主机连接到名为“billy”的一台主机的详细信息。

为了支持从另一台主机到网络服务器的连接,必须以表示主机名(或 ip 地址)和端口号的 -h 和 -p 标志启动网络服务器。

java org.apache.derby.drda.NetworkServerControl start -h hostname -p port_number

下面是远程主机 billy.ibm.com 的例子,该主机运行着 derby 网络服务器:

    $java org.apache.derby.drda.NetworkServerControl start -h billy.ibm.com -p 1527
    Server is ready to accept connections on port 1527.
    

在远程主机上运行 Derby Network Server 时,强烈建议在 Security Manager 下运行服务器。Derby Server and Administration Guide 解释了如何这样做。

表 5. 远程主机上网络驱动程序的连接参数

Database Manager Apache Derby, V 10.0
JDBC Driver IBM DB2 Universal
Database "remoteNS;create=true":retrieveMessagesFromServerGetMessage=true;
这是远程主机上数据库的路径。
如果要连接到 Unix 主机,应确保将路径指定为 /top_dir/sub_dir/db_name。
而且,如果您选择使用 Universal Driver 属性,需要将该属性附在这后面。
Host billy.ibm.com
Port 1527
JDBC Driver Class (不可编辑) com.ibm.db2.jcc.DB2Driver
Class location C:\CS\lib\db2jcc_license_c.jar;C:\CS\lib\db2jcc.jar
Connection URL (不可编辑) jdbc:derby:net://billy.ibm.com:1527/"remoteNS;create=true":retrieveMessagesFromServerGetMessage=true;

提供一个用户名和密码,测试到远程主机的连接。如果一切顺利的话,单击 Finish 按钮以完成连接。否则,检查下面的列表。

远程主机上的网络服务器连接问题

  • 远程网络服务器必须带 -h 和 -p 标志来启动,主机名不能为 localhost。
    带 -h 0.0.0.0 (在所有端口上侦听)启动网络服务器将允许从客户机使用远程主机名来进行远程连接。如果网络服务器是以 -h 0.0.0.0 值启动的,那么启动了网络服务器的主机可以使用“localhost”这个名称来进行连接。


  • 确保网络向导中的主机名与启动网络服务器时所在的主机的名称相同。 例如,如果您试图连接到一台无法到达的主机,则可能收到类似这样的错误消息:

    Connection to "remoteNS;create=true" failed. IWAS0126E Problems encountered while trying to establish connection Remote_NS. Reason: java.net.UnknownHostException: Error opening socket to server fakehost.ibm.com on port 1527 with message: fakehost.ibm.com'

    为确保您可以访问正确的主机(与向导中指定的和运行网络服务器的机器一致),可以从本地主机发出一个 ping 命令。如果通过 ping 不能到达远程主机,那么数据库连接也将失败。

  • 确保在本地主机上可以从 ij 访问远程网络服务器。 设置本地主机上的 classpath,使之包含这些 jar 文件: derbytools.jar、db2jcc.jardb2jcc_license_c.jar

    然后将下面的命令作一行输入,不要有换行符,以启动 ij 来连接到远程在主机:(出于格式的目的,这里人为的换行符以反斜杠表示。)
        java -Dij.driver=com.ibm.db2.jcc.DB2Driver \
        -Dij.protocol=jdbc:derby:net://
                  
                  remote_host_name:
                  
                  port_number/ \
        -Dij.user=username -Dij.password=password  org.apache.derby.tools.ij
        
                
                

    启动了 ij 之后,发出下面的命令创建和连接到远程数据库:
        ij> connect 'remoteNS;create=true';
        



  • 确保网络向导中的端口号与用于启动网络服务器的端口号一致。 例如,如果指定了错误的端口号,那么即使主机名是正确的,也仍将看到:

    Connection to "remoteNS;create=true" failed. IWAS0126E Problems encountered while trying to establish connection Remote_NS. Reason: 'java.net.ConnectException: Error opening socket to server' billy.ibm.com on port 3100 with message: Connection refused: 'connect'

  • 对于所有网络服务器连接都必须指定一个用户名和密码。如果没有提供用户名,那么就会看到类似这样的错误消息:

    Connection to "remoteNS;create=true" failed. IWAS0126E Problems encountered while trying to establish connection Remote_NS. Reason: 'userid length, 0, is not allowed'.

对于连接的总结

本节展示了如何使用 Derby 嵌入式数据库驱动程序和 DB2 Universal 驱动程序通过下面展示的配置连接到本地和远程数据库。

  • Embedded Derby Driver,本地连接
  • Network Server Driver,本地连接
  • Network Server Driver,远程连接





回页首


Database Explorer

Database Explorer 视图显示在工作区活动期间所创建的所有连接。对于活动连接,在连接名后面有一个 + 标记,表明可以展开连接树来查看该连接所连接到的数据库以及该数据库所包含的表。

Database Explorer 可用于:

  • 创建一个新的数据库连接。
  • 连接到一个已有的数据库并查看该数据库的内容。
  • 如果连接被断开,重新连接到一个数据库。
  • 端口与数据库的连接。
  • 刷新连接中定义的数据库对象视图。
  • 删除一个数据库连接。
  • 定义数据库内容视图的过滤器。
  • 打开 SQL Scrapbook 以发出特定的 SQL 语句。

首先使用 Database Explorer 查看数据库的内容,然后进入关于使用 Database Explorer 时的一些其他选项的更多细节。

使用您早先创建的嵌入式连接。如果该连接不是活动的,那么可以通过弹出它的上下文菜单(在它上面单击右键)并选择 Reconnect 来激活它。如果您想建立一个新的嵌入式连接,那么可以让系统表,即 SYS 模式中的表,留在数据库视图中。您可以使用这些表来演示如何使用 Database Explorer。

首先,单击活动连接上的 + 号。这将展开并显示那个连接的数据库连接 URL。 + 号右边的符号表示一个数据库。展开数据库树,以查看数据库中包含的模式的名称。现在,展开 SYS 模式。这样将出现一个有三个文件夹的视图 - Tables、Views 和 Stored Procedures。展开 Tables 文件夹。

现在看看系统表“SYS.SYSTABLES”。展开这个表的树。现在 Database Explorer View 看上去应该是这样的:


图 7. SYS 模式表的 Database Explorer 视图
Database Explorer 视图

从这个视图可以看到,SYS.SYSTABLES 表由 4 个 CHARACTER 类型的列和一个 VARCHAR 类型的列组成。为了看到这个表的内容,可以在 SYS.SYSTABLES 树项中单击鼠标,然后单击右键,这样将弹出上下文菜单。这个上下文菜单包含一个“Sample Contents” 菜单选项。选中该菜单项,以执行相应的“select * from SYS.SYSTABLES”语句。这将自动弹出 DB Output 视图。

DB Output 视图

DB Output 视图中以标签页的形式显示了刚才在执行 Sample Contents 命令时发出的查询。在该标签页的右边是标签“Sample contents”,然后是一个“Results”标签页,其中显示了被执行的 SQL 的结果。在这个例子中,SQL 是 “SELECT * from SYS.SYSTABLES”。


图 8. SYS.SYSTABLES 示例内容的 DB Output 视图
DB Output 视图

更多关于 Database Explorer 的信息

下面的屏幕快照展示了多种 database explorer 选项。


图 9. DB Explorer 选项
DB Explorer 选项

“Edit Connection”选项可以使您回到 Database Connection Wizard,以便重新命名和更改现有某个连接的任何属性。“Refresh”允许您刷新数据库的视图,例如,如果您删除了当前连接中的一个表,那么在进行刷新之前,这个表仍然会显示在 Database Explorer 视图中。

“Disconnect”选项的行为就有点令人惊讶了。在 Derby 中,当使用一个嵌入式连接“启动”一个数据库时,另一个 Java 虚拟机(Java virtual machine,JVM)不能访问这个数据库。通过关闭一个数据库,可以使这个数据库被另一个 JVM 访问。如果从 ij 中断开连接,那么就不允许您进行连接或发出 SQL,但是该数据库仍被认为是“已启动”的。若使用 DB2 plug-ins for Eclipse 工具,虽然这里也启动了数据库,但即使发出了一个‘Disconnect’命令,也仍然可以对该数据库发出 SQL。这是 beta 版的一个限制。数据库后面的 + 号不见了,但仍可以对数据库发出 SQL。当前,关闭数据库的惟一办法是退出 Eclipse。

在使用嵌入式连接时应注意: 由于以嵌入式方式启动的数据库只能有一个 JVM 访问它,如果您从 Eclipse 中连接到一个数据库,并试图从另一个应用程序(例如 ij)中访问相同的数据库,那么是不会成功的。 例如, ij 将发出如下警告(出于格式目的的换行符以 / 字符表示):

ij> connect 'C:\derby_home\mytestDB';
ERROR XJ040: Failed to start database 'C:\derby_home\mytestDB', /
see the next exception for details.
ERROR XSDB6: Another instance of Cloudscape may have already booted the /
database C:\derby_home\mytestDB. 
  

DB Explorer 视图中最后使用的几个选项之一是 SQL Scrapbook。在晚些时候会有一个专门的 小节 来进行讨论。

关于使用过滤器的更多信息

在本文的开始,当创建到数据库的一个新连接时,您使用了 Filters,以包含 SYS 模式中的 Derby System 表,以便可以浏览一些表。在连接已经建立好之后,还有一种方法可以用来创建过滤器,而且不用编辑连接,这种方法就是使用 Database Explorer 视图中的下拉菜单。下一节将描述如何使用 Connection 向导创建过滤器。

现在从一个更实际的例子中来研究如何使用过滤器。一个例子就是过滤多个用户使用的数据库中的模式。在 Derby 中,每当一个用户用一个用户名和密码连接到一个数据库,而没有指定要创建或连接到的模式时,系统自动创建的默认模式是用户名。

连接向导中过滤器规格说明的第二部分是一个表和/或视图过滤器。所以一旦完成了对模式的过滤,就会应用第二个过滤器。使用这一部分过滤器的一个例子是只显示一个模式中的视图。下面是一副图片,展示了只允许名为“MYUSER”的 SCHEMA 和“MYUSER”模式中以字母 t 开头的表显示在输出中的情况下过滤器的情形。


图 10. 对模式和表应用过滤器
对模式和表应用过滤器

接下来的例子可能会让您有点惊讶。假设在模式 MYUSER 中有如下表和视图:

create table tab1 (id integer);
create table mytab2 (id integer);
create view view1 as select * from tab1;
create view view2 as select * from mytab2;

如果在连接上惟一的过滤器是指定 SCHEMA like ‘MYUSER' 的模式过滤器,那么在当前连接的 Database Explorer 视图中将看到如下所示的情形。


图 11. 只应用模式过滤器
只应用模式过滤器

现在更改上面的过滤器,给表和视图过滤器加一些变化。如果您编辑产生以上屏幕的同一个连接,将下面的变化添加到表和视图过滤器:“Table like t”和 “View like v%”,您认为在 Database Explorer 视图中会出现什么情况呢?下面是为该连接指定的过滤器的图片。


图 12. 表和视图过滤器
表和视图过滤器

回头看看前面的模式,您有一个名为 tab1 的表和一个名为 mytab2 的表。因此过滤器应该显示名为 tab1 的表,而不显示名为 mytab2 的表。而且,您有两个视图。名为 view1 的视图基于表 tab1,名为 view2 的视图则基于表 mytab2。由于您选择了连接 Meet any condition,现在将过滤器设置为显示任何以字母 v 开头的视图和任何以字母 t 开头的表。看看下面的图便知道在 Database Explorer 视图中真正显示的是什么。


图 13. Database Explorer 输出
Database Explorer 输出

视图 view2 不见了!为什么?因为这个视图是基于表 mytab2 的,而这个表被排除在 Database Explorer 视图之外。这个例子演示了如果没有周全地考虑到过滤器的行为方式,那么有时候使用过滤器可能会产生有点出乎预料的结果。





回页首


使用 SQL scrapbook

在这一节中,我们学习如何使用 SQL Scrapbook 来发出临时 SQL 语句。数据定义语言(Data Definition Language,DDL)以及数据操纵语言(Data Manipulation Language(DML)语句可以从 SQL Scrapbook 中发出。SQL Scrapbook 的两个好的功能是 Content Assist 和 Content Tip,通过它的上下文菜单可以访问这两个功能。讨论 SQL Scrapbook 中这些功能的最容易的方法就是用眼睛去瞧瞧。

进入 Database Explorer 视图,弹出用于一个到 Derby 的活动连接的上下文菜单。其中有一个菜单项是“Open SQL Scrapbook”。单击这个菜单项便会弹出一个名为“Scrapbook_1”的编辑器。编辑器上标有一个带数字的标签,这个数字指出该编辑器是剪贴簿(scrapbook)的哪一个拷贝。前面您已经了解到,在 Eclipse 中可以一次打开多个编辑器。由于每个 SQL Scrapbook 都是在一个编辑器的一个实例中,因此如果打开了多个剪贴簿,则这些剪贴簿也将平铺地显示,并且每个新实例将把接下来的数字编号附在名称“Scrapbook_”的后面。

如果您不熟悉 SQL(或者虽然熟悉,但是还想要一点帮助),那么 Content Assist 在形成 SQL 语句的过程中会有所帮助。通常,您在使用数据库时,第一件想做的事就是创建一个表。如果您刚学 SQL,您可能知道应该使用“Create table”语法来创建一个表,但是可能不清楚这种语句的细节。Content Assist 和 Content Tips 对于这一点会有帮助。在 Scrapbook 编辑器中首先输入字母 C,然后单击右键并选择 Content Assist。这样将弹出一个弹出式窗口,该窗口将显示一些对以 C 开头的 SQL 语句的选择。


图 14. SQL scrapbook 和 content assist
Content Assist

选择 theCreatechoice。现在 Scrapbook 窗口中就会有“CREATE”这个词出现。这样就选了正确的选择来创建一个表,但是如何来创建呢?接下来选择 Content Tip 菜单项,以寻求关于创建表语句的帮助。下面的图展示了用于“Create”SQL 单词的 Content Tip。


图 15. SQL scrapbook 和 content tip
Content tip

内容帮助和提示(Content Assist 和 Content Tips)可以在很多情形下使用,而不仅仅是用于一条语句的起始单词。为了熟悉内容帮助和提示的工作方式,尝试输入一个单词或代码片断,然后弹出 Content Assist 和 Content Tips,以理解这些工具的功能。如果您比较熟悉 SQL,或者已经知道表、insert 语句和要运行的查询,那么您可能不会频繁使用 Content Assist 和 Content Tips。对于接下来的不使用这些工具的例子,使用以下模式。

create table restaurants (id integer, name varchar(25), cuisine varchar(20))
insert into restaurants values (1, 'Grande Burrito', 'mexican')
insert into restaurants values (2, 'Irifune''s, 'japanese')
insert into restaurants values (3, 'Francine''s Pizza', 'italian/pizza')
insert into restaurants values (4, 'Estrada', 'mexican')
insert into restaurants values (5, 'Top Pooch', 'american')
insert into restaurants values (6, 'The Palace', 'thai')
select * from restaurants where cuisine like '%can'

将第一个 SQL 片断,即 create table restaurants ... 剪切和粘贴到 SQL Scrapbook 编辑器。然后选择从工作台顶部的菜单项选择 “SQL”。从 SQL 菜单项中选择惟一的选项,即 Execute 选项。DB Output 窗口将显示“SQL Scrapbook”、“Messages”、“Parameters”和“Results”标签页。“Messages”标签页应该显示 restaurants 表的创建执行成功。现在剪切和粘贴第一条 insert 语句到同一个 SQL Scrapbook 窗口中。目前,一次只能从 SQL Scrapbook 发出一条 SQL 语句。不过,从 Scrapbook 中运行语句时,如果在要执行的语句之前的那些语句前面加上两条短横,即 --,则这些语句将被解析为注释,因而不会执行。下面是一个例子,其中表创建语句被注释掉了,而 insert 语句准备被执行。


图 16. SQL scrapbook 和注释
SQL scrapbook

接下来执行这条 insert 语句,然后用和上面相同的方式,通过注释掉所有前面的语句来执行剩下的 insert 语句。或者也可以直接删除前面的语句。现在输入 select 语句,运行这条 SQL 语句,这样结果应该会自动显示在 DB Output 视图 SQL Scrapbook 区域的“Results”标签页中。下面的图片展示了可以从这个标签页中看到的结果。


图 17. SQL scrapbook 和查询结果
SQL scrapbook 和查询结果

从 Scrapbook 中运行 SQL 语句时,结果显示在 DB Output 视图中。DB Output 视图在 results 标签页中显示结果,另外两个观察结果的区域是“Messages”标签页和“Status”行。例如,如果没有正确地运行查询 select * from restaurants where cuisine like '%can',而是忘了表的名称,从而运行查询 select * from restaurant where cuisine like '%can'。这时 DB Output 视图的 Status 区域就会报出 “Failure”,而 DB Output 视图中 SQL Scrapbook 区域上的“Messages”标签页将显示如下信息:


图 18. DB output SQL scrapbook 错误
DB output

Messages 区域中的信息解释,执行语句时遇到 SQL Exception 异常,原因是 RESTAURANT 表不存在。这有助于解释为什么查询不能执行。

早先,在 Network Server Connection Problems 一节中,我们建议在用于网络服务器连接的 Connection URL 中包括 retrieveMessagesFromServerOnGetMessage=true。该属性在判定网络服务器连接问题时很有用,然而,它在执行 SQL 语句时对于返回错误文本也是很有用的。

下面两个屏幕快照展示了 SQL Scrapbook Messages 标签页中的输出。一个展示设置了 retrieveMessagesFromServerOnGetMessage=true 时的输出,一个展示没有设置该属性时的输出,默认情况下该属性是 false。


图 19. 没有设置 retrieveMessagesFromServerOnGetMessage 时的 SQL scrapbook 错误消息
retrieveMessagesFromServerOnGetMessage 没有设置

图 20. retrieveMessagesFromServerOnGetMessage 设为 true 时的 SQL scrapbook 错误消息
retrieveMessagesFromServerOnGetMessage 设为 true

显然,使用连接上的 Universal Driver 属性 retrieveMessagesFromServerOnGetMessage 有助于诊断 SQL 语法错误和问题。





回页首


结束语

本文解释了关于 Eclipse 平台和术语的基础知识。文中深入介绍了不同 Derby 连接类型的创建和配置,以及连接问题的排除方法。现在您应该理解如何使用 DB2 plug-ins for Eclipse 工具来浏览和查询 Derby 数据库了。



参考资料

  • 参与论坛讨论

  • Eclipse 的帮助系统包括一个 IBM Cloudscape 信息室,其中包含了所有 Cloudscape 文档。此外,帮助中还提供了关于使用 DB2 plug-ins for Eclipse 的信息。

  • 文章 Cloudscape Version 10: 技术概述 (developerWorks,2004 年 8 月)对于理解 Cloudscape 是一篇很好的参考资料。

  • The Eclipse Project 幻灯片很好地介绍了 Eclipse 平台。

  • 文章 Eclipse 平台入门 (developerWorks,2002 年 9 月)给出了 Eclipse 的历史和概述,包括关于如何安装 Eclipse 和插件的细节。


关于作者

Susan Cline 致力于使用 Cloudscape 来为 Cloudscape 开发人员和用户开发技术内容。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

将您的建议发给我们或者通过参加讨论与其他人分享您的想法.







回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款