跳至内容 Java Solaris 社区 Sun 商店 加入 SDN 我的个人档案 加入的益处
 
Sun Java Studio Creator 2 查询编辑器
 
作者:Beth Stearns,2005 年 11 月  
可以使用 Sun Java Studio Creator IDE 的查询编辑器来创建和修改对数据库表的 SQL 查询。IDE 的发行版本 2 对查询编辑器的功能进行了增强,您可以使用更多的功能来调整查询,构造复杂的查询,查看表之间的关系,甚至可以将查询与应用程序分开进行测试。本文详细介绍了查询编辑器,并着重说明了这些增强功能。
 
目录
 
访问查询编辑器
基本功能
在查询中添加多个表
在查询中添加选择条件
 
访问查询编辑器

IDE 简化了使用数据库查询的过程。将数据库表添加到应用程序中时(如将表组件放到页面上,然后将数据库表放到该表组件上),IDE 会将该数据库表绑定到表组件上并创建 SQL 查询。您会看到页面上显示的表组件发生变化:立即反映数据库表中的列。

您还会注意到,IDE 在会话 Bean 中添加了一个行集。该行集包含一个缺省的 SQL 语句,用于选择数据库表中的所有列。IDE 使用 rowset.setCommand(String SQLCommand) 方法将查询的 SQL 语句放在会话 Bean 的构造函数中,其中 rowset 是放在页面上的表的行集,SQLCommand 是查询 select 语句。这样,您就可以选择在会话 Bean Java 源代码中编辑查询,或者通过查询编辑器进行编辑。

例如,我们将表组件放到应用程序的 Page1 上,然后将 Travel 数据库中的 TRIP 数据库表放到表上。IDE 将通用表组件显示更改为图 1 中所示的内容,并将 tripRowSet 组件添加到 SessionBean1 上。

 
图 1:表行集
图 1:表行集

您很可能希望只检索表中的某些记录,可以通过诸如应用某些选择条件来实现。并希望此类选择条件是应用程序传入的动态值(如应用程序用户输入的值),而不是静态的、预设的硬编码值。您还可能希望只检索表中的几列,而不是所有列,并且希望按精确的顺序来显示这些记录。您可以通过编辑查询 SQL SELECT 语句来完成所有这些操作。查询编辑器为您提供了一种图形方式来编辑表行集组件中包含的 SQL SELECT 语句。

要打开查询编辑器,请在“概要”窗口中找到会话 Bean 中表的行集。双击行集组件(或右键单击行集组件,然后从弹出式菜单中选择“编辑 SQL 语句”选项)。请参见图 2。

 
图 2:打开查询编辑器
图 2:打开查询编辑器

图 3 显示了三个查询编辑器窗格(共四个窗格)。在此图中,查询编辑器显示了 TRIP 表的缺省 SQL 查询以及两个弹出式菜单。可以在相应的窗格中单击鼠标右键来打开弹出式菜单。这些窗格可以帮助您处理查询,它们从上到下的顺序依次为:

  1. 图表窗格(位于顶部)以图形方式表示查询。放在页面上的每个表会以方框的形式出现,查询编辑器会在其中显示表中的所有列并标记主键和外键。运行查询时,SQL SELECT 语句将选择选中的列。

  2. 网格窗格显示一个包含多列的表,可用来为放到页面上的每个表设置不同的查询条件。您可以调整网格表中列的大小。

  3. SQL 窗格(仅靠网格窗格下面)显示实际的 SQL 查询语法。一旦您在上面两个窗格的任意一个窗格中进行更改,那么这些更改都会自动反映在所有这三个窗格中。此外,如果您习惯使用 SQL,则可以直接在 SQL 语句中键入更改内容。如果要执行此操作,请使用该窗格的弹出式菜单“解析查询”选项来更新其他两个窗格。使用“运行查询”选项来测试查询。

  4. 结果窗格(位于底部,但此处没有显示)显示通过“运行查询”选项测试的查询结果。
 
图 3:查询编辑器窗格
图 3:查询编辑器窗格
基本功能

选择和显示列
查询编辑器简化了从数据库表中选择和显示所需列的过程。如果在图表窗格中选中某个表列或者在网格窗格显示中选中其输出列,则 SQL 查询会选择该列并将其显示在页面上。如果在图表或网格窗格中取消选中某列,则会在两个窗格中同时取消选中该列。取消选中的表列不包含在 SQL SELECT 语句中,并且由于检索不到该列,所以不会显示它。

例如,我们不希望在查询结果中看到 TRIPID 或 TRIPTYPEID,因此我们取消选中了这两个字段(请参见图 4)。

设置别名(AS 子句)
可以使用网格窗格中的“别名”列在 SELECT 语句中插入 AS 子句。设置列别名后,运行查询时,它将使用别名作为列标题,而不是使用表列名称。例如,假设要将 PERSONID 列仅显示为 PERSON。请在 PERSONID“别名”列中输入 Person(或 PERSON),以测试模式运行查询时,将使用别名来显示该列。我们还设置了 DEPDATE、DEPCITY 和 DESTCITY 的别名。在运行查询时,结果窗格将显示这些列的别名(请参见图 4)。

排序顺序
也可以按任何表列对查询进行排序,并且选择是按升序还是降序来排列该列。可以设置多个排序条件(即对多个表列进行排序),并设置排序顺序的优先级。

例如,我们定义了三个要进行排序的列,首先按升序排序 DESTCITY 列,然后接着按升序排序 DEPDATE 列,最后按降序排序 PERSONID 列(请参见图 4)。

 
图 4:定制查询
图 4:定制查询

请注意,这些更改(别名、排序顺序和选定列)会反映在 SQL 窗格的 SQL SELECT 语句中。现在可以很轻松地读取 SQL 查询语法,原因在于特定的词语使用不同的颜色进行突出显示:SQL 的保留字使用蓝色、模式词语使用绿色、表名使用黑色、列名使用紫色来表示。

在查询中添加多个表

可以在查询中添加其他表,该查询将在 SELECT 语句中添加 JOIN 语句。要执行此操作,请使用图表窗格的“添加表...”弹出式菜单功能(请参见图 3),然后从“选择要添加的表”对话框中选择其他表(请参见图 5)。

 
图 5:添加其他表
图 5:添加其他表
图 5:添加其他表

我们已添加了 PERSON 表。请注意,图表窗格是如何使用方向箭头来显示两个表之间的关系(请参见图 6)。

也可以使用图表窗格中的“分组方式”弹出式菜单,按数据类型对查询结果进行分组。这将在查询中添加 GROUP BY 子句。

例如,图 6 显示了另一个定制查询。此时,我们连接了 TRIP 和 PERSON 表,添加了 GROUP BY 子句并且只选择了 PERSONID 不等于 1 的记录(我们将在下一部分“在查询中添加选择条件”中介绍选择条件)。

 
图 6:添加到第二个表的连接
图 6:添加到第二个表的连接
在查询中添加选择条件

您可以为查询选择添加条件,从而只返回与指定条件匹配的行。除 LIKE 和 IN 外,还可以选择使用比较运算符(如等于、大于、小于和不等于等)。可以将选择条件应用于多个表列,并按这些条件的优先级指定它们的顺序(就像执行排序顺序一样)。

让我们仔细看一下,如何使用查询编辑器在查询中添加选择条件。在网格窗格中,右键单击要添加选择条件的行中的“条件”列。如果要输入静态值来选择记录,请在“添加查询条件”对话框中选中“值”,然后从下拉列表中选择比较运算符并输入值。例如,您可能只想选择 PERSONID 大于 100 的那些 TRIP 记录。请参见图 7。

 
图 7:用于输入静态值的“添加查询条件”对话框
图 7:用于输入静态值的“添加查询条件”对话框

您可以让 SQL 查询使用在运行时以编程方式设置的参数,而不是设置静态值。请选择要应用的比较运算符,然后在相同的“添加查询条件”对话框中选中“参数”。例如,假设使用“参数”条件选项来选择 TRIP 记录,其中 PERSONID 小于或等于程序提供的值(请参见图 8)。“添加查询条件”对话框完成后,PERSONID 的“条件”列将显示 >= 比较运算符和 ?(指示该值是在运行时设置的)。随后在查询编辑器中运行查询以对其进行测试时,将显示“指定参数值”对话框,您可以在其中输入参数值。

注意:有关在 SQL 查询中添加参数化条件和在运行时以编程方式设置参数值的详细信息,请参见教程使用数据绑定组件访问数据库

 
图 8:使用动态选择参数
图 8:使用动态选择参数

在查询编辑器中测试该查询时,会看到图 9 底部结果窗格中显示的结果。

 
图 9:包含查询结果的结果窗格
图 9:包含查询结果的结果窗格
另请参见
Beth Stearns 撰写了许多有关 Java 技术的文章和书籍。最近,她与别人合著了一本有关 J2EE BluePrints 的书《Designing Web Services with the J2EE 1.4 Platform》(使用 J2EE 1.4 平台设计 Web 服务)。