com.supermap.data
类 JoinItem

java.lang.Object
  继承者 com.supermap.data.JoinItem

public class JoinItem
extends java.lang.Object

连接信息类。

连接信息类。用于矢量数据集与外部表的连接。外部表可以为另一个矢量数据集(其中纯属性数据集中没有空间几何信息)所对应的DBMS表,也可以是用户自建的业务表。需要注意的是,矢量数据集与外部表必须属于同一数据源。

当两个表格之间建立了连接,通过对主表进行操作,可以对外部表进行查询,制作专题图以及分析等。当两个表格之间是一对一或多对一的关系时,可以使用join连接。当为多对一的关系时,允许指定多个字段之间的关联。该类型的实例可被创建。

数据集表之间的联系的建立有两种方式,一种是连接(join),一种是关联(link)。连接的相关设置是通过 JoinItem 类实现的,关联的相关设置是通过 LinkItem 类实现的,另外,用于建立连接的两个数据集表必须在同一个数据源下,而用于建立关联关系的两个数据集表可以不在同一个数据源下。

下面通过查询的例子来说明连接和关联的区别,假设用来进行查询的数据集表为 DatasetTableA,被关联或者连接的表为 DatasetTableB,现通过建立 DatasetTableA 与 DatasetTableB 的连接或关联关系来查询 DatasetTableA 中满足查询条件的记录:

1.连接(join)

设置将 DatasetTableB 连接 DatasetTableA 的连接信息,即建立 JoinItem 类并设置其属性,当执行 DatasetTableA 的查询操作时,系统将根据连接条件及查询条件,将满足条件的 DatasetTableA 中的内容与满足条件的 DatasetTableB 中的内容构成一个查询结果表,并且这个查询表保存在内存中,需要返回结果时,再从内存中取出相应的内容。

2.关联(link)

设置将 DatasetTableB (副表)关联到 DatasetTableA (主表)的关联信息,即建立 LinkItem 类并设置其属性,DatasetTableA 与 DatasetTableB 是通过主表 DatasetTableA 的外键(LinkItem.getForeignKeys() 方法)和副表 DatasetTableB 的主键(LinkItem.getPrimaryKeys() 方法)实现关联的,当执行 DatasetTableA 的查询操作时,系统将根据关联信息中的过滤条件及查询条件,分别查询 DatasetTableA 与 DatasetTableB 中满足条件的内容,DatasetTableA 的查询结果与 DatasetTableB 的查询结果分别作为独立的两个结果表保存在内存中,当需要返回结果时,SuperMap 将对两个结果进行拼接并返回,因此,在应用层看来,连接和关联操作很相似。

3.LinkItem 只支持左连接,UDB、PostgreSQL 和 DB2 数据源不支持 LinkItem,即对 UDB、PostgreSQL 和 DB2 类型的数据引擎设置 LinkItem 不起作用;

4.JoinItem 目前支持左连接和内连接,不支持全连接和右连接,UDB 引擎不支持内连接;

5.使用 LinkItem 的约束条件:空间数据和属性数据必须有关联条件,即主空间数据集与外部属性表之间存在关联字段。主空间数据集:用来与外部表进行关联的数据集。外部属性表:用户通过 Oracle 或者 SQL Server 创建的数据表,或者是另一个矢量数据集所对应的 DBMS 表。

示例:
以下代码示范如何构造一个连接信息类,并将其添加到连接信息集合中。
 public void toStringTest() {
        // 假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象
        // 从数据源里得到名为“World”和“Capital”的数据集,分别为 datasetVector 和 datasetVector1,两个数据集都有 capital 字段
        // 设置连接信息类,返回用于连接的表名
        DatasetVector datasetVector = (DatasetVector) datasource.getDatasets().get("World");
        DatasetVector datasetVector1 = (DatasetVector) datasource.getDatasets().get("Capital");
        JoinItem joinitem = new JoinItem();
        String foreignTableName = datasetVector1.getTableName();

        // 设置连接信息类
        joinitem.setForeignTable(foreignTableName);
        joinitem.setJoinFilter("World.capital=" + foreignTableName + ".capital");
        joinitem.setJoinType(JoinType.LEFTJOIN);
        joinitem.setName("Connect");
        System.out.println("连接信息为:" + joinitem.toString());

        // 设置连接信息集合类,将连接信息加入到连接信息集合中
        JoinItems joinitems = new JoinItems();
        joinitems.add(joinitem);
 }
 

构造方法摘要
JoinItem()
          构造一个新的 JoinItem 对象。
 
方法摘要
 void dispose()
          释放该对象所占用的资源。
 java.lang.String getForeignTable()
          返回外部表的名称。
 java.lang.String getJoinFilter()
          返回与外部表之间的连接表达式,即设定两个表之间关联的字段。
 JoinType getJoinType()
          返回两个表之间连接的类型。
 java.lang.String getName()
          返回此连接信息对象的名称。
 void setForeignTable(java.lang.String value)
          设置外部表的名称。
 void setJoinFilter(java.lang.String value)
          设置与外部表之间的连接表达式,即设定两个表之间关联的字段。
 void setJoinType(JoinType value)
          设置两个表之间连接的类型。
 void setName(java.lang.String value)
          设置此连接信息对象的名称。
 java.lang.String toString()
          将此连接信息对象输出为格式化字符串。
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

构造方法详细信息

JoinItem

public JoinItem()
构造一个新的 JoinItem 对象。

方法详细信息

getForeignTable

public java.lang.String getForeignTable()
返回外部表的名称。

返回:
外部表的名称。
默认值:
默认值为一个空字符串。

setForeignTable

public void setForeignTable(java.lang.String value)
设置外部表的名称。

参数:
value - 外部表的名称。
示例:
请参见 JoinItem 类的示例。

getJoinFilter

public java.lang.String getJoinFilter()
返回与外部表之间的连接表达式,即设定两个表之间关联的字段。例如,将一个房屋的面数据集(Building)的 district 字段与一个房屋拥有者的纯属性数据集(Owner)的 region 字段相连接,两个数据集对应的表名称分别为 Table_Building 和 Table_Owner,则连接表达式为 Table_Building.district = Table_Owner.region,当有多个字段相连接时,用 AND 将多个表达式相连。

返回:
两个表之间关联的字段。
默认值:
默认值为一个空字符串。

setJoinFilter

public void setJoinFilter(java.lang.String value)
设置与外部表之间的连接表达式,即设定两个表之间关联的字段。例如,将一个房屋的面数据集(Building)的 district 字段与一个房屋拥有者的纯属性数据集(Owner)的 region 字段相连接,两个数据集对应的表名称分别为 Table_Building 和 Table_Owner,则连接表达式为 Table_Building.district = Table_Owner.region,当有多个字段相连接时,用 AND 将多个表达式相连。

参数:
value - 两个表之间关联的字段。
示例:
请参见 JoinItem 类的示例。

getJoinType

public JoinType getJoinType()
返回两个表之间连接的类型。连接类型用于对两个连接的表进行查询时,决定了返回的记录的情况。UDB引擎不支持内连接。

返回:
两个表之间连接的类型。
默认值:
默认值为 LEFTJOIN

setJoinType

public void setJoinType(JoinType value)
设置两个表之间连接的类型。连接类型用于对两个连接的表进行查询时,决定了返回的记录的情况。

参数:
value - 两个表之间连接的类型。
示例:
请参见 JoinItem 类的示例。

getName

public java.lang.String getName()
返回此连接信息对象的名称。

返回:
连接信息对象的名称。
默认值:
默认值为 "UntitledJoinItem”。

setName

public void setName(java.lang.String value)
设置此连接信息对象的名称。

参数:
value - 连接信息对象的名称。
示例:
请参见 JoinItem 类的示例。

dispose

public void dispose()
释放该对象所占用的资源。当调用该方法之后,此对象不再可用。


toString

public java.lang.String toString()
将此连接信息对象输出为格式化字符串。其格式为 {Name=””,ForeignTable=””,JoinFilter=””,JoinType=}。

覆盖:
java.lang.Object 中的 toString
返回:
此连接信息对象的格式化字符串。